用*arg 和 **kwargs 只是为了方便并没有强制使用它们。
*args是不定长参数,它可以表示输入参数是不确定的,可以是任意多个**kwargs是关键字参数,赋值的时候是以键值对的方式,参数可以是任意多对在定义函数的时候.
当你不确定你的函数需要传递多少参数时,你可以用*args。
例如,它可以传递任意数量的参数:
def func(*args):for count, thing in enumerate(args):print('{0} {1}'.format(count, thing))# 0 apple# 1 banana# 2 peach# 3 watermelon# 4 pearfunc('apple','banana','peach','watermelon','pear')
相似的,**kwargs允许你使用没有事先定义的参数名:
def fucn(**kwargs):for name, value in kwargs.items():print('{} == {}'.format(name, value))# apple == 1# banana == 2# pear == 3fucn(apple='1',banana='2',pear='3')
也可以混着用,命名参数首先获得参数值然后所有的其他参数都传递给*args和**kwargs,命名参数在列表的最前端。例如:
def func(string, **kwargs):
*args 和 **kwargs 可以同时在函数的定义中,但是*args 必须在**kwargs前面。调用函数时,也可以使用*和 **的语法。
def func(a, b, c):print('a={},b={},c={}'.format(a,b,c))#a=1,b=2,c=3ff = [1,2,3]func(*ff)
它可以传递列表(元组)的每一项并把它们解包。注意必须与他们在函数里的参数相吻合。也可以在函数定义或者函数调用时用*
