2015-02-06 151 views
3

我有一個Python函數f(a, b),我試圖定義一個新函數g,其中帶有一個參數f已經設置,如g(f(a = 5))。這將是一個簡單的例子:使用默認參數傳遞函數

def sum(a, b): 
    return a+b 

def g(x, f): 
    return f(x) 

而且我希望能夠評估g(5, sum(b=0))。我怎麼做?

+0

不知道我下面,什麼是錯用'高清F( x):return g(5,x)'? – amit 2015-02-06 05:59:45

+0

'sum(b = 0)'這是什麼意思?在這種情況下,「a」是什麼? – Marcin 2015-02-06 06:08:35

+3

FWIW,使用'sum'作爲你自己的函數的名字是一個壞主意,因爲已經有一個帶有這個名字的內置函數。 – 2015-02-06 06:56:09

回答

6

使用functools.partial

g(5, partial(sum, b=5)) 

返回,要求將像FUNC稱爲與位置參數ARGS和關鍵字參數關鍵字當一個新的部分對象。如果更多的參數被提供給該呼叫,它們將附加到參數。如果附加的關鍵字參數被提供,它們延伸並覆蓋關鍵字

局部()被用於部分功能的應用程序,「凍結」的函數的參數和/或關鍵字產生一個新的對象具有簡化一些部簽名。例如,部分()可用於創建行爲等,其中基本參數默認爲兩個INT()函數可以調用的:

basetwo = partial(int, base=2) 
+0

非常感謝!精美的作品。 – mirunix 2015-02-06 06:18:55