2017-10-17 118 views
2

我想將一個元組(或者可能是一個列表)作爲一系列值(參數)傳遞給一個函數。該元組應當被解壓到* arg中作爲參數。在* args中傳遞元組

例如,這是明確的:

def func(*args): 
    for i in args: 
     print "i = ", i 

func('a', 'b', 3, 'something') 

但我想要做的是這樣的:

tup = ('a1', 'a2', 4, 'something-else') 
func(tup) 

這應該表現類似於第一種情況。 我想我應該在這裏使用重印和評估,但不知道如何。

我知道我可以在函數中傳遞元組,然後將其解包到主體中,但我的問題在於如何在函數調用中解壓縮它。

+6

只需使用'func(* tup)'。 –

回答

1

您可以直接使用func(*tup)在調用函數時解開元組。

>>> func(*tup) 
i = a1 
i = a2 
i = 4 
i = something-else 

這是一種相當於func(tup[0], tup[1], tup[2], ...)。同樣也適用,如果函數需要多個單獨的參數:

>>> def func2(a, b, c, d): 
...  print(a, b, c, d) 
... 
>>> func2(*tup) 
('a1', 'a2', 4, 'something-else') 

見例如here更深入的語法背景。

0

您可以在調用期間通過在元組的標識符前面加上*來解開元組。這允許您輕鬆區分應該解壓縮的元組和不應該解壓縮的元組。這是一個例子:

>>> MyTuple = ('one', 2, [3]) 
>>> 
>>> def func(*args): 
... for arg in args: 
... print(arg) 
... 
>>> 
>>> func(*MyTuple) 
one 
2 
[3] 
>>> 
>>> func(MyTuple) 
('one', 2, [3])