热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python的动态参数

1.*的作用用在动态参数前,打包多个参数并将其转化为元组deffunc(*args):print(args)func(1,2,3)#(1,2,3)输入参数为1,

1. ' * ' 的作用


  • 用在动态参数前,打包多个参数并将其转化为元组

def func(*args):print(args)func(1, 2, 3) # (1, 2, 3)

输入参数为1, 2, 3,最后返回的结果是一个元组 (1, 2, 3)


  • 用在可迭代对象前,进行自动解包转化为多个单变量参数

def func(a, b, c):print(a, b, c)args = [1, 2, 3]
func(*args) # 1 2 3

输入参数为一个列表[1, 2, 3],解释器自动进行解包然后分别传递给3个变量。


2. ' ** ' 的作用


  • 用在动态参数前,打包多个赋值形式的参数并将其转化为字典

def func(**kwargs):print(kwargs)func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}

3. 参数类型


  • 位置参数

所有参数的顺序必须一一对应,且数量一致。

def func(a, b, c):print(a, b, c)func(1, 2, 3) # 1 2 3

  • 关键字参数

函数调用通过键值对形式加以指定。关键字参数之间不存在先后顺序;有位置参数时,位置参数必须在关键字参数的前面。

def func(a, b, c):print(a, b, c)func(a=1, b=2, c=3) # 1 2 3
func(b=2, c=3, a=1) # 1 2 3
func(4, b=5, c=6) # 4 5 6
# 错误的调用方式
func(a=4, b=5, 6) # SyntaxError: positional argument follows keyword argument

  • 默认参数

为参数提供默认值,调用函数时可传可不传。所有位置参数必须放在默认参数前面。

# 正确的定义方式
def func(a, b=2):print(a, b)func(1) # 1 2
func(1, 3) # 1 3# 错误的定义方式
def func(a=1, b):print(a, b) # SyntaxError: non-default argument follows default argument

4. ' *args ' 与 ' **kwargs '

定义函数时,如果不确定调用的时候会传递多少个参数,可以打包位置参数或者关键字参数来进行参数传递。


  • 位置传递

def func(*args):print(args)func(1) # (1,)
func(1, 2) # (1, 2)
func(1, 2, 3) # (1, 2, 3)

  • 关键字传递

def func(**kwargs):print(kwargs)func(a=1) # {'a': 1}
func(a=1, b=2) # {'a': 1, 'b': 2}
func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}

注意:***只有在传参时才有用。

# 错误的使用方法
args = (1,2,3)
a, b, c = *args # SyntaxError: can't use starred expression here

5. 参数混合使用

函数定义和调用时的参数类型必须一致;位置参数放在*args参数前,*args参数放在**kwargs参数前,**kwargs参数放在最后。

# 位置参数 默认参数 *args **kwargs
def func(a, b, c=0, *args, **kwargs):print(a, b, c, args, kwargs)func(1, 2, m=7, n=8) # 1 2 0 () {'n': 8, 'm': 7}
func(1, 2, 3, 4, 5, 6, m=7, n=8) # 1 2 3 (4, 5, 6) {'m': 7, 'n': 8}# 位置参数 *args 默认参数 **kwargs
def func(a, b, *args, c=0, **kwargs):print(a, b, c, args, kwargs)func(1, 2, 3, 4, 5, 6, m=7, n=8) # 1 2 0 (3, 4, 5, 6) {'m': 7, 'n': 8}
func(1, 2, 3, 4, 5, 6, c=9, m=7, n=8) # 1 2 9 (3, 4, 5, 6) {'m': 7, 'n': 8}

 

 

 


推荐阅读
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
author-avatar
子华2502924833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有