有没有办法将函数存储在列表或字典中,以便在调用索引(或键)时触发存储的函数?

时间:2012-02-09 03:40:05

标签: python dictionary dispatch

例如,我尝试了类似mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()]的内容,但这些内容无效。

是否存在某种具有此类功能的结构?

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

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

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

2 个答案:

答案 0 :(得分:109)

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

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'])

答案 1 :(得分:-4)

您也可以这样做:

foo1()foo2()foo3(),...成为函数

像这样定义foo

foo = lambda n: eval("foo"+str(n))

现在你可以迭代它们了。

for i in range(n):
    foo(i)()

n是定义的foo函数的数量。 如果您不想总是将新定义的foo类型函数附加到列表中,这种方式会派上用场。

修改

重要!!

请查看this