例如,我尝试了类似mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()]
的内容,但这些内容无效。
是否存在某种具有此类功能的结构?
我意识到我可以使用一堆def
语句轻松地做到这一点:
def func1():
foo()
bar()
goo()
但是我需要的陈述数量变得非常笨拙且难以记住。将它们很好地包装在字典中会很好,我可以一次又一次地检查键。
答案 0 :(得分:109)
函数是Python中的第一类对象,因此您可以使用字典进行调度。例如,如果foo
和bar
是函数,dispatcher
是这样的字典。
dispatcher = {'foo': foo, 'bar': bar}
请注意,值foo
和bar
是函数对象,而不是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'])
答案 1 :(得分:-4)
您也可以这样做:
让foo1()
,foo2()
,foo3()
,...成为函数
像这样定义foo
:
foo = lambda n: eval("foo"+str(n))
现在你可以迭代它们了。
for i in range(n):
foo(i)()
n是定义的foo
函数的数量。
如果您不想总是将新定义的foo
类型函数附加到列表中,这种方式会派上用场。
修改强>
请查看this。