1

関数があるとします

def oldfunction(arg1,arg2,arg3):
    print(arg1,arg2,arg3)

最初の引数を 10 に設定した新しい関数を作成したいと考えています。新しい関数の動作は次のようになります。

>>> new_function(20,"30")
10 20 '30'

これを行う 1 つの方法は、ラムダ関数を使用することです。

>>> newfunction = lambda arg2,arg3: function(10,arg2,arg3)
>>> newfunction("ten",[10])
(10, 'ten', [10])

しかし、「oldfunction」がいくつの引数を取るかを事前に知らなかったとします。「oldfunction」と同じですが、最初の引数が設定され、後続のすべての引数が開いたままの新しい関数を作成したいと考えています。

これを行う方法はありますか?

4

3 に答える 3

8

functools.partial を試してください:

from functools import partial

new_function = partial( oldfunction, 10 )
于 2012-06-11T17:44:58.293 に答える
3

次の例では、oldfunction の最初の引数の位置に 10 をバインドし、残りの 2 つの引数を *args に指定できます。だから、これを試してください:

def newfunction(*args):
    return oldfunction(10, *args)
于 2012-06-11T17:45:18.700 に答える
0

これは機能的な解決策になる可能性があり、コードは正確なケースでは次のようになります。

from functools import partial

def newfunction(*args):
    return oldfunction(10, *args)

newfunction(20, 30)
(10, 20, 30)

10 は oldfunction の最初の引数としてバインドされ、その後に *args が続きます。

于 2012-06-11T18:09:56.473 に答える