python函数参数不定 python不确定参数个数定义参数( 二 )


正确的调用方式
add(x=1, y=2)
add(y=2, x=1)
add(1, y=2)
以上调用方式都是允许的 , 能够正常执行
错误的调用方式
add(x=1, 2)
add(y=2, 1)
以上调用都会抛出SyntaxError 异常
上面例子可以看出:有位置参数时 , 位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的
3.默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用,有多个默认参数时,调用的时候 , 既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数 。当不按顺序提供部分默认参数时,需要把参数名写上
默认参数的函数定义
上面示例第一个是正确的定义位置参数的方式,第二个是错误的,因为位置参数在前,默认参数在后
def add1(x=1,y) 的定义会抛出如下异常
默认参数的函数调用
注意:定义默认参数默认参数最好不要定义为可变对象 , 容易掉坑
不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple
可变对象,该对象所指向的内存中的值可以被改变 , dict,list
这里只要理解一下这个概念就行或者自行百度,后续会写相关的专题文章讲解
举一个简单示例
4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数
可变参数主要有两类:
*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带*,args只是约定俗成的变量名,可以替换其他名称
**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带**,kwargs只是约定俗成的变量名 , 可以替换其他名称
*args 的用法
args 是用来传递一个非键值对的可变数量的参数列表给函数
语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词 , args相当于一个变量名,可以自己定义的
在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数 。在函数中,我们有一个循环实现传递的参数计算和输出结果 。
还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号
理解* * kwargs
**kwargs 允许你将不定长度的键值对, 作为参数传递给函数 , 这些关键字参数在函数内部自动组装为一个dict
下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注
Python中不定长参数这样用对吗?def hh(w,**l,pu='d'): 为什么?题主你好,
一般来说, python函数中有两种形式的参数: 位置参数, 关键字参数.
位置参数: 说白了就是在函数调用时必传的,你不给它赋值函数就运行不了.如:
从拿上图例子来说, 在调用hello时,如果你只写个hello(),肯定会报错, 因为在执行函数里面的print(name)时, 不知道name的值是多少.
所以对于上图来说,hello("Jack"), hello("Mike")这都是正确的调法.
小结: 就上面的hello函数定义来说, name就叫做位置参数. 说白了就是函数定义中,只有变量名的参数就是位置参数(如果这句话不理解,接着向下看完关键字参数,一比较就明白了),而位置参数的特点是: 调用函数时必须要给它们传值,原因上面已经说过//def hello(a,b,c,d,e,f) 这里面a,b,c,d,e,f全都是位置参数
-----
关键字参数: 首先它同位置参数一样, 也是用在函数定义中. 其外在表现就是一具等式: "变量名=值". 举例来说吧:

推荐阅读