(1)、在函数定义时,当我们不确定函数的参数个数时,*args允许你传入任意数量的参数,**kwargs可以传入任意数量的关键字参数。
def func1(*args):
print(args)
def func2(**kwargs):
print(kwargs)
def func3(a,b,*args,**kwargs):
print(a,b,args,kwargs)
func1(1,2,['a',1,'c'])
func2(name='Steve',num=[1,2,3])
func3(1,2,id=[7,8,9])
func3(1,2,3,4,5,id=[7,8,9])
运行结果:
注意:*args 和**kwargs既可以单独使用,也可以一起使用,一起使用时,*args必须在**kwargs前面
(2)、在函数调用时,*会把list或者tuple的元素unpack,作为一个个参数传递,而** 会把dict作为关键字参数传递。
def func1(a,b,c,d):
print(a,b,c,d)
def func2(a,b,c,d=1):
print(a,b,c,d)
def func3(a,b,*args,**kwargs):
print(a,b,args,kwargs)
A=[5,6,7,8]
func1(*A)
B={'a':3,'b':5,'c':7}
func2(**B)
b={'name':'Ali','title':123}
func3(*A,**b)
运行结果:
注意:unpack后的参数数目要和函数定义保持一致;* 会把list或者tuple分解为一个个参数传递给函数,而**会把dict转成关键字参数。