如何声明一个带内联函数的字典
我需要在使用一个函数作为字典的元素之前,先正式定义这个函数吗?
def my_func():
print 'my_func'
d = {
'function': my_func
}
我更想直接在里面定义这个函数。我刚试着把我想做的事情写出来,但Python的空格规则让我很难在字典里直接定义一个函数。有没有什么办法可以做到这一点?
7 个回答
7
你可以使用装饰器:
func_dict = {}
def register(func):
func_dict[func.__name__] = func
return func
@register
def a_func():
pass
@register
def b_func():
pass
func_dict
最终会用函数的完整名称来进行映射:
>>> func_dict
{'a_func': <function a_func at 0x000001F6117BC950>, 'b_func': <function b_func at 0x000001F6117BC8C8>}
你可以根据需要修改register
使用的键。关键在于我们使用函数的__name__
属性来获取合适的字符串。
9
你真的需要一个字典吗,还是只需要用getitem
来访问数据?
如果你只需要后者,那就可以使用一个类:
>>> class Dispatch(object):
... def funcA(self, *args):
... print('funcA%r' % (args,))
... def funcB(self, *args):
... print('funcB%r' % (args,))
... def __getitem__(self, name):
... return getattr(self, name)
...
>>> d = Dispatch()
>>>
>>> d['funcA'](1, 2, 3)
funcA(1, 2, 3)
30
这个回答的意思是,在Python中,不能在字典定义的同时直接声明一个函数。感谢所有花时间来参与讨论的人。