最後に、あなたは持っています:
yu = lambda x: i + yu(x)
ただし、ラムダを作成したときではなく、実行時yu
に検索されます。代わりにこれを行ってください:
for i in range(0,5):
yu = lambda x, yu=yu: i + yu(x)
ただし、これは返されません10
。代わりに戻ります20
:
>>> yu = lambda x: 0
>>> for i in range(0,5):
... yu = lambda x, yu=yu: i + yu(x)
...
>>> yu(0)
20
なぜなら、今i
はまだコンテキストから検索されているからです(そして、今ではループが終了しているので、そう4
です)。解決?i
キーワード引数にも移動します。
for i in range(0,5):
yu = lambda x, yu=yu, i=i: i + yu(x)
今これは動作します:
>>> yu = lambda x: 0
>>> for i in range(0,5):
... yu = lambda x, yu=yu, i=i: i + yu(x)
...
>>> yu(0)
10
この話の教訓?コンテキストをラムダのスコープに適切にバインドします。