6

functools のパーシャルを使用して、関数の 2 番目の引数を部分的に適用したいのですが、次のようにパーシャルではなくラムダを使用する方が簡単です。

>>> def func1(a,b):
...     return a/b
...
>>> func2 = lambda x:func1(x,2)
>>> func2(4)
2

しかし、ここでは(学習のために)部分的に使用したいので、これを思いつきました。

>>> def swap_binary_args(func):
...     return lambda x,y: func(y,x)
...
>>> func3 = partial(swap_binary_args(func1),2)
>>> func3(4)
2

次の疑似コードのように、任意の場所で任意の引数を部分的に適用できるレベルまでこの戦略を拡張することは可能ですか?

>>>def indexed_partial(func, list_of_index, *args):
...     ###do_something###
...     return partially_applied_function

>>>func5=indexed_partial(func1, [1,4,3,5], 2,4,5,6)

私たちの場合、この関数を次のように使用できます

>>>func6=indexed_partial(func1, [1], 2)

私が望むようにインデックス付きのパーシャルを持つことは可能ですか? 私が気付いていない、これに似たものはすでにありますか?さらに重要なことに、インデックス付きの部分的な一般的なアイデアは、なぜ良いのか悪いのか?

この質問は、キーワード引数を取らない関数の 2 番目の引数を部分的に適用できますか? の重複の可能性があるとマークされています。 その質問では、OPは2番目の引数を部分的に適用することは可能ですかと尋ねましたが、ここでは、任意の引数を部分的に適用できる関数をクックする方法を尋ねています

4

1 に答える 1