Python函数参数类型全部如下
位置参数,默认位置参数,不定长位置参数,键参数,不定长键参数
>>> def func(a,b,c=10,*args,**kwargs):
... print(a,b,c,*args,**kwargs)
...
>>> func(1,2,3,4,5)
1 2 3 4 5
>>> def func(a,b,c=10,*args,**kwargs):
... print(a,b,c,args,kwargs)
...
>>> func(1,2,3,4,5,6,7,8,9)
1 2 3 (4, 5, 6, 7, 8, 9) {}
>>> def func(a,b,c=10,*arg,f=10,**kwargs):
... print(a,b,c,arg,f,kwargs)
...
>>> func(1,2,3,4,5,6,7,8,9)
1 2 3 (4, 5, 6, 7, 8, 9) 10 {}
func(1,2,6,7,8,f=3,c=4,g=5,e=9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() got multiple values for argument 'c'
定义时:建议将键参数定义在不定长位置参数之后
a,b :位置参数
c=10:默认位置参数
*args:不定长位置参数
f=10:键参数
**kwargs:不定长键参数
备注:*的作用是拆包
传参数时:
位置参数,默认位置参数,不定长位置参数,键参数,不定长键参数
备注:c=10:默认位置参数,如果不按照位置传参,后面赋值c时则出现TypeError错误
Python中元组是可以a=1,2 表示,如果在函数传递中这种表述方式容易产生歧义,
例如:
def func(a,b):
print(a,b)
fun(a=1,2)
计算机无法识别是a代表的是元组1,2,还是a=1,b=2,故而python定义位置参数,默认位置参数,不定长位置参数,键参数,不定长键参数
以此方式传递参数则可以保证参数数据能明确