Python传递参数前面的*或**
先上结论:
func(*[1, 2, 3]) == func(1, 2, 3)
func(**{'name':'Spade_', 'number':'888888'}) == func(name='Spade_', number='888888')
如果你不懂Python四种常用的传参方式,参考:[Python] 仅限位置参数和仅限关键字参数
1. 单星号 * 解析可变参数
传递参数前面的*,和不带星号的使用,func()是一个接收可变参数的函数。
func(*[1, 2, 3]) == func(1, 2, 3)
func([1, 2, 3])
def func(*args): pass
我们打印一下,看看结论
def func(*args):
print(args)
for i in args:
print(i)
func(*[1, 2, 3])
print("======")
func([1, 2, 3])
(1, 2, 3)
1
2
3
(1, 2, 3)
1
2
3
======
([1, 2, 3],)
[1, 2, 3]
我们看到,*将[1,2,3]解析成了参数1, 2, 3。
2. 双星号 * 解析可变关键字参数
def func(**kwargs):
print(kwargs)
for k, v in kwargs.items():
print(k, v)
func(**{'name':'Spade_', 'number':'888888'})
print("======")
func(name='Spade_', number='888888')
{'name': 'Spade_', 'number': '888888'}
name Spade_
number 888888
======
{'name': 'Spade_', 'number': '888888'}
name Spade_
number 888888
我们可以看到结果和开头结论是一样的。