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)
输出:
1
2
(8, 9, 0)
{'z': 11, 'd': 22}


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