私は次のようなことをしたいと思います:
def add(a, b):
#some code
def subtract(a, b):
#some code
operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)
Pythonでは、関数ポインタのようなものを割り当てることは可能ですか?
私は次のようなことをしたいと思います:
def add(a, b):
#some code
def subtract(a, b):
#some code
operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)
Pythonでは、関数ポインタのようなものを割り当てることは可能ですか?
試してみましたか?あなたが書いたものは、書かれたとおりに機能します。関数は、Python の第一級オブジェクトです。
Python にはポインターと呼ばれるものはありませんが、コードは記述どおりに機能します。関数はファーストクラスのオブジェクトであり、名前に割り当てられ、他の値として使用されます。
これを使用して、たとえば次のように戦略パターンを実装できます。
def the_simple_way(a, b):
# blah blah
def the_complicated_way(a, b):
# blah blah
def foo(way):
if way == 'complicated':
doit = the_complicated_way
else:
doit = the_simple_way
doit(a, b)
またはルックアップ テーブル:
def do_add(a, b):
return a+b
def do_sub(a, b):
return a-b
handlers = {
'add': do_add,
'sub': do_sub,
}
print handlers[op](a, b)
オブジェクトにバインドされたメソッドを取得することもできます:
o = MyObject()
f = o.method
f(1, 2) # same as o.method(1, 2)
ほとんどの Python オペレーターは既に同等の関数をoperatorモジュールに持っていることに注意してください。