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

Zac*_*ack 48 python dictionary dispatch

例如,我尝试了类似的东西mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()],但是没有用.

有这种功能的某种结构吗?

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

def func1():
    foo()
    bar()
    goo()
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*ota 116

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

dispatcher = {'foo': foo, 'bar': bar}
Run Code Online (Sandbox Code Playgroud)

请注意,值是foobar哪些是函数对象,而NOT 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'])
Run Code Online (Sandbox Code Playgroud)

  • 如果方法是类的一部分,那么这将如何工作?那么,如果函数是 ``` def func1(self) ``` 并且当我们调用它时它必须是 self.func1,我们如何制作“调度程序”字典? (2认同)