5

私は次のようなことをしたいと思います:

def add(a, b):
    #some code

def subtract(a, b):
    #some code

operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)

Pythonでは、関数ポインタのようなものを割り当てることは可能ですか?

4

3 に答える 3

22

試してみましたか?あなたが書いたものは、書かれたとおりに機能します。関数は、Python の第一級オブジェクトです。

于 2008-11-21T01:30:33.960 に答える
7

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)
于 2008-11-21T02:14:12.483 に答える
1

ほとんどの Python オペレーターは既に同等の関数をoperatorモジュールに持っていることに注意してください。

于 2009-03-31T05:23:18.690 に答える