2011-11-08 40 views
6

這個函數f接受一個參數列表並返回具有相同參數列表的另一個可調用函數,以便可以對其應用其他函數。這個組合器有一個名字嗎?

from operator import add, mul 

def f(*a, **kw): 
    return lambda g: g(*a, **kw) 

map(f(3, 10), (add, mul)) # -> [13, 30] 

你叫什麼f?這是某種組合嗎?

回答

4

組合子是applycurried形式。與(不建議使用的)內置函數apply相比,f顛倒了參數的順序更有用,提供了看起來像是雙重功能的函數。

+0

與(可能忽略不計)的差異,可以調用一個「部分」與進一步通過額外的參數。 – glglgl

+0

不,停止...它是不一樣的,我認爲... – glglgl

+0

我已經大幅改寫了這個,以糾正我最初誤解了這個問題。 –

0

它與partial密切相關,但不完全相同。

partial需要一個函數和一些參數並返回一個可調用的函數,該函數使用組合參數調用給定的可調用函數。

def pr(x): print (x) # making it fit for 2.x and 3.x 

p = functools.partial(pr, 1, 2, 3) 
p() # prints 1, 2, 3 

q = f(1, 2, 3) 
p(pr) # prints 1, 2, 3