python里面的*args和**kwargs
1、*args和**kwargs代表的是变量, 变量前面的 *(星号)才是必须的. 也可以写成*v和**vs;写成*args 和**kwargs只是一个常用的书写方式。首先看看*args;一个星号*的作用是将非键值对的(tuple,list)元素进行unpack,得到的是一个例元组如:def myargs(x,*args): print(x) print(args)myargs(1,2,2)输出:1(2, 2)

2、然后我们看看 **kwargs,**kwargs传入的必须是键值对def mykwargs(x,**kwargs): print(x) print(kwargs)mykwargs(2,3)如上如果我们这样传入的话会报错,File "C:/Users/king/PycharmProjects/sellmall/seo/mytest.py", line 11, in <module> mykwargs(2,3)TypeError: mykwargs() takes exactly 1 argument (2 given)因为**kwargs传入的必须是键值对def mykwargs(x,**kwargs): print(x) print(kwargs)mykwargs(2,tr=3)输出:2{'tr': 3}


3、接下来我们把*args 和**kwargs一起使用来看看传入参数def mya(x,y,*args,**kwargs): print(x) print(args) print(kwargs)mya(1,2,d=22,3)如上这样传入也会报错,当遇到键值时候,后面的参数将被视为全是键值对的,这里args则传入空值;def mya(x,y,*args,**kwargs): print(x) print(args) print(kwargs)mya(1,2,d=22,z=11)如上输出:1()传入空值{'z': 11, 'd': 22}下面我们都传入def mya(x,y,*args,**kwargs): print(x) print(y) print(args) print(kwargs)mya(1,2,8,9,0,d=22,z=11)输出:12(8, 9, 0){'z': 11, 'd': 22}


4、*args和**kwargs虽然都是变量,但是少一个*区别还是比较大的,在传入参数时候,我们一定要注意数据类型。如果是字典类型的只能用**kwargs
