为什么这不起作用?如何在循环内定义函数
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()'? – asongtoruin
你认为types.FunctionType可以帮助你吗? – Ptank
你不*需要创建一个类。只要理解Python闭包在词法上与后期绑定行为有关。 –