【发布时间】:2017-06-06 08:53:50
【问题描述】:
为什么这不起作用?
u = {}
for me in ['foo', 'bar']:
def callback():
return 'I am %s' % me
u[me] = callback
我得到的输出是:
>>> u['foo']()
'I am bar'
似乎callback 在最近一次迭代中定义了一次。
编辑
正如 kawadhiya21 所提议的,类方法会起作用:
class CallbackFactory():
def __init__(self, me):
self.me = me
def __call__(self):
return 'I am %s' % self.me
u = {}
for me in ['foo', 'bar']:
u[me] = CallbackFactory(me)
但它比前一种方法复杂得多。
【问题讨论】:
-
试试
u[me] = callback()? -
尝试在for循环外定义CallBack并从for循环内调用函数
-
你觉得 types.FunctionType 能帮到你吗?
-
你确实不需要需要创建一个类。只需了解 Python 闭包在词法范围内具有后期绑定行为。