有没有办法将函数存储在列表或字典中,以便在调用索引(或键)时触发存储的函数? [英] Is there a way to store a function in a list or dictionary so that when the index (or key) is called it fires off the stored function?

查看:27
本文介绍了有没有办法将函数存储在列表或字典中,以便在调用索引(或键)时触发存储的函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,我尝试过类似 mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()],这不起作用.

For instance, I've tried things like mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()], which doesn't work.

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

Is there some kind of structure with this kind of functionality?

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

I realize that I could obviously do this just as easily with a bunch of def statements:

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

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

But the number of statements I need is getting pretty unwieldy and tough to remember. It would be nice to wrap them nicely in a dictionary that I could examine the keys of now and again.

推荐答案

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

Functions are first class objects in Python and so you can dispatch using a dictionary. For example, if foo and bar are functions, and dispatcher is a dictionary like so.

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

注意,值是 foobar,它们是函数对象,而不是 foo()bar().

Note that the values are foo and bar which are the function objects, and NOT foo() and bar().

要调用foo,只需执行dispatcher['foo']()

如果您想运行存储在列表中的多个函数,您可以这样做.

If you want to run multiple functions stored in a list, you can possibly do something like this.

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

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

fire_all(dispatcher['foobar'])

这篇关于有没有办法将函数存储在列表或字典中,以便在调用索引(或键)时触发存储的函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆