2011-11-08 10 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

コンビネータはcurriedの形でapplyです。 (非推奨)組み込み関数applyと比較して、fは、functools.partial関数のデュアルのように見えるように、引数の順序をより有効にするために、引数の順序を逆にします。

+0

(おそらく無視できる)違いとして、 'partial'はさらに引数を渡して呼び出すことができ、追加で渡されます。 – 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 
関連する問題