次のコードが動作する方法はありますか?引数としての部分関数呼び出しpython
def f1(f2, x):
return f2(x)
def f2(y, z):
return y + z
f1(f2(10,), 20)
output 30
f2
機能はz
をミス。だから、私はf1
にx
という引数をf2
にz
として渡したいと思います。 私は何か助けていただければ幸いです。
次のコードが動作する方法はありますか?引数としての部分関数呼び出しpython
def f1(f2, x):
return f2(x)
def f2(y, z):
return y + z
f1(f2(10,), 20)
output 30
f2
機能はz
をミス。だから、私はf1
にx
という引数をf2
にz
として渡したいと思います。 私は何か助けていただければ幸いです。
はい、これはfunctools.partial
がすべてに約あるものです:
from functools import partial
f1(partial(f2,10), 20)
partial
が入力として機能f
、パラメータの名前無名のとの任意の数をとります。名前のないパラメータと名前付きパラメータがすでに埋め込まれている新しい関数を作成します。
とやや同等です:上記の実装と比較して有意にオーバーヘッドを削減します
def partial(func, *partialargs, **partialkwargs):
def g(*args, **kwargs):
fargs = partialargs + args
fkwargs = partialkwargs.copy()
fkwargs.update(kwargs)
return func(*farg, **fkwargs)
return g
しかしfunctools
。 lambda
表現を示す
ありがとうございます。出来た! – Masa
別のオプション:@Willemによって示されるように
f1(lambda x: f2(10,x), 20)
部分は、あなたの特定の問題に適していますが、lambda
表現は、柔軟性のために知ってもいいです - 式がちょうどそのはるかに複雑になることができます部分的な呼び出し。
'def'、' lambda'や 'functools.partial'を使って作成された、例えば' f1(lambda z:f2(10、z)、20) 'を使って呼び出し可能な引数を渡す必要があります。 – jonrsharpe
@jonrsharpeここでの目的は、ある関数から別の関数に引数を渡すことに焦点を当てていますが、この質問は呼び出し中に引数を部分的に渡すことに焦点を当てています。私はこれが適切な偽装ターゲットではないと思う。 –
OP FYIこれらの多くは、あなたの質問のタイトルプラス 'site:stackoverflow.com'を検索することによっても見つけられるので、今後尋ねる前に研究をしてください。 – jonrsharpe