65

例如,我尝试过类似的方法mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()],但它不起作用。

是否有某种结构具有这种功能?

我意识到我显然可以用一堆def语句轻松地做到这一点:

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

但是我需要的语句数量变得非常笨拙且难以记住。将它们很好地包装在字典中会很好,我可以不时检查键。

4

1 回答 1

141

函数是 Python 中的第一类对象,因此您可以使用字典进行调度。例如 iffoobarare 函数,anddispatcher是这样的字典。

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

请注意,值是foobar是函数对象,而不是foo()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 回答