python函数中的*与**
1)*将函数参数打包成元组使用,传入参数为位置参数形式
>>> def test1(*arge):
... print(arge)
...
>>> test1(1)
(1,)
>>> test(1,2,3,4)
>>> def test2(x,*args):
... print(x)
... print(args)
...
>>> test2(1,23,4,5,6)
1
(23, 4, 5, 6)
若当参数为列表,元组,集合的时候想要将其中元素独立传入函数中,可以使用*来解包
>>> test1([1,2,3,4,5,6])
([1, 2, 3, 4, 5, 6],)
>>> test1(*[1,2,3,4,5,6])
(1, 2, 3, 4, 5, 6)
>>> test1(*{1,2,3,4,5,6})
(1, 2, 3, 4, 5, 6)
>>> test1(*(1,2,3,4,5,6))
(1, 2, 3, 4, 5, 6)
当传参是使用*解包字典的时候作用是将字典遍历传输,值为字典的key值
>>> test1(*{'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'})
('Alice', 'Beth', 'Cecil')
2)**将函数参数打包成字典形式,传入参数为关键字参数形式
>>> def test3(**kwargs):
... print(kwargs)
>>> def test4(x,**kwargs):
... print(x)
... print(kwargs)
>>> test3(z=1,y=2,c=3)
{'z': 1, 'y': 2, 'c': 3}
>>> test4(1,a=2,b=3)
1
{'a': 2, 'b': 3}
若实参为字典时可以使用**解包,将字典解包成关键字参数传入,不解包会报错
>>> test3(**{'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'})
{'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
3)混用
>>> def test5(x,*args,**kwargs):
... print(x)
... print(args)
... print(kwargs)
...
>>> test5(1,2,3,4,a=5,b=6)
1
(2, 3, 4)
{'a': 5, 'b': 6}
4)错误语法
在定义参数的时候*必须在**前否则报错
>>> def test7(x,**kwargs,*args):
File "<stdin>", line 1
def test7(x,**kwargs,*args):
^
SyntaxError: invalid syntax