python中*args和与**kwargs

(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转成关键字参数。

猜你喜欢

转载自blog.csdn.net/SteveForever/article/details/81607756