[Python] 傳遞引數前面的*或**

Spade_發表於2020-10-30

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

我們可以看到結果和開頭結論是一樣的。

相關文章