次のコードは2回吐き出されますが、私はそれ1
を見てからを期待しています。0
1
def pv(v) :
print v
x = []
for v in range(2):
x.append(lambda : pv(v))
for xx in x:
xx()
裏で、Pythonラムダがローカル変数が指している参照にバインドすることを期待していました。しかし、そうではないようです。この問題は、ラムダが最新のC ++と同等のバインド(たとえば「boost :: bind」)を実行している大規模なシステムで発生しました。このような場合、スマートptrにバインドするか、ラムダのコピーをコピーして作成します。
では、ローカル変数をラムダ関数にバインドし、使用時に正しい参照を保持するにはどうすればよいですか?ガベージコレクターを備えた言語からこれを期待しないので、私はその振る舞いにかなり夢中になっています。