最後に、あなたは持っています:
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
この話の教訓?コンテキストをラムダのスコープに適切にバインドします。