2012-10-08 150 views
13

如果一個函數需要n個參數,並且還有另一個函數返回一個包含n個項目的序列(或者我有一個包含n個項目的序列),有沒有一種方法可以'映射'這兩個函數(或使第一個函數以n個項作爲輸入和返回結果的序列)我不想(也可能不能在某些場合)自己編輯函數並更改其參數參數並返回值類型。解包函數參數

即)

def func1(x, y, z): 
    return x+y+z 

def func2(w): 
    return [i for i in range(w,w+3)] 

斜面func1(func2(...))在這種情況下。

回答

14

你正在尋找的*args參數語法:

>>> def foo(bar, baz, spam): 
...  print bar, baz, spam 
... 
>>> arguments = [1, 2, 3] 
>>> foo(*arguments) 
1, 2, 3 

當將參數傳遞給一個可調用的,由一個*星號之前的任何表達式,被解釋爲位置參數的序列,並擴大到被傳遞作爲被調用對象(函數,方法等)的單獨參數。

爲了您的例子是:

func1(*func2(...)) 

有使用**雙asterixes(需要映射)關鍵字等價的,你可以使用函數簽名相同的語法了。

請參閱documentation on call expressions以及函數簽名鏡像語法documentation on function definitions