[Python] 传递参数前面的*或**

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

我们可以看到结果和开头结论是一样的。

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页