65

たとえば、次のようなことを試しましたが、うまくいきmydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()]ません。

この種の機能を備えたある種の構造はありますか?

def一連のステートメント を使用して、これを同じように簡単に実行できることは明らかです。

def func1():
    foo()
    bar()
    goo()

しかし、私が必要とするステートメントの数はかなり扱いにくく、覚えるのが難しくなっています。ときどきキーを調べることができるように、それらを辞書にうまくまとめるとよいでしょう。

4

1 に答える 1

141

関数は Python のファースト クラス オブジェクトであるため、辞書を使用してディスパッチできます。たとえば、 iffoobarは関数で、 anddispatcherは so のような辞書です。

dispatcher = {'foo': foo, 'bar': bar}

foo値はとbar関数オブジェクトであり、 NOTfoo()とであることに注意してくださいbar()

を呼び出すfooには、次のようにしますdispatcher['foo']()

編集:リストに格納されている複数の関数を実行する場合は、次のようなことができます。

dispatcher = {'foobar': [foo, bar], 'bazcat': [baz, cat]}

def fire_all(func_list):
    for f in func_list:
        f()

fire_all(dispatcher['foobar'])
于 2012-02-09T03:41:58.080 に答える