これはなぜ機能しないのですか?ループ内で関数を定義する方法
u = {}
for me in ['foo', 'bar']:
def callback():
return 'I am %s' % me
u[me] = callback
私が手出力は次のようになります。
>>> u['foo']()
'I am bar'
callback
は、最新の繰り返しで一度定義されているようです。
EDIT
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のクロージャーがレキシカルスコープでlate-bindingの振る舞いであることを理解してください。 –