この関数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
とは何ですか?これは何らかのコンビネータですか?
この関数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
とは何ですか?これは何らかのコンビネータですか?
コンビネータはcurriedの形でapplyです。 (非推奨)組み込み関数apply
と比較して、f
は、functools.partial関数のデュアルのように見えるように、引数の順序をより有効にするために、引数の順序を逆にします。
これは、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
(おそらく無視できる)違いとして、 'partial'はさらに引数を渡して呼び出すことができ、追加で渡されます。 – glglgl
いいえ、止めてください...同じではない、と思う... – glglgl
私は本来、誤って質問したことを修正するためにこれを大幅に書き直しました。 –