0

辞書を介して呼び出したい関数がいくつかありますが、固定値を渡します。

def doSum(a,b):
        print a+b
def doProd(a,b):
        print a*b

経由で入力を渡す場合

d = {'sum': doSum,'prod':doProd}
d['prod'](2,4)

それはすべて正常に動作し、8 を出力します。

しかし、次のようなことを試してみると

d = {'sum': doSum(2,4),'prod':doProd(2,4)}
d['prod']

6 と 8 が出力されます。dict の固定パラメーターを持つキーで指定した関数のみを実行するようにコードを変更するにはどうすればよいですか?

4

3 に答える 3

3

渡すデフォルト値を持つ関数functools.partial()格納するために使用します。

関数を呼び出す必要があります。

from functools import partial
d = {'sum': partial(doSum, 2, 4),'prod': partial(doProd, 2, 4)}
d['sum']()

オブジェクトが呼び出されるpartialと、折り返してラップされた関数を呼び出し、 で既に格納されている引数partialに加えて、渡した他の引数を渡します。

>>> addtwo = partial(doSum, 2)
>>> addtwo(6)
8
>>> addtwo(4)
6

最後になりましたが、operatorモジュールを見てください。そのモジュールにはすでにdoSumanddoProd関数が含まれています。

>>> import operator
>>> operator.add(2, 4)
6
>>> operator.mul(2, 4)
8

これらの関数は、値を出力する代わりに結果を返します。上記の例では、代わりに印刷を行うのは python 対話型インタープリターです。

于 2013-07-19T10:31:37.973 に答える
3

Martijn の anwser に代わる「古い学校」として、ラムダ関数を使用することもできます。

d = {
    "sum": lambda: doSum(2, 4),
    "prod": lambda: doProd(2, 4),
    }
d["sum"]()
于 2013-07-19T10:53:03.167 に答える