不定长参数
*args参数
- *args形参只能接受位置参数,不能接受关键字参数。它会将所有接收的参数保存在一个元组中。
def fun1(*args):
print(args)
fun1(1,2,3)
结果:
**kwargs参数
- **kwargs形参可以接收其它关键字参数,且必须写在所有参数最后边。会将接收的参数统一保存到一个字典中。
def fun2(**kwargs):
print(kwargs)
fun2(a=1, b=2, c=3)
结果:
且这里传入的a,b,c变量是无法直接打印出来的。a,b,c被存入字典后即被删除。
*args&**kwargs混合
**形参只有一个,并且必须写在所有参数后面。
def fun3(*args, **kwargs):
print(args)
print(kwargs)
fun3(1, 2, 3, a=1, b=2, c=3)
def fun3(x, *args, y, **kwargs):
print(x)
print(y)
print(args)
print(kwargs)
fun3(1, 2, 3, 4, y=5, a=1, b=2, c=3)
结果:
函数拆包
传参时,在序列类型的参数前加星号*,以实现自动传递。
def fun(a, b, c):
print(a)
print(b)
print(c)
tuple1 = (1, 2, 3)
dict1 = {
'a': 3, 'b': 2, 'c': 1}
fun(*tuple1)
fun(**dict1)
结果: