爲什麼這不起作用?如何在循環內定義函數
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閉包在詞法上與後期綁定行爲有關。 –