次のPythonコードの実行結果として出力される値は何か? funcs = [lambda x: i*x for i in range(3)]; print(funcs[0](2))
このコードはクロージャと遅延束縛(late binding)の例です。リスト内包表記で作られた各ラムダは外側の変数iを参照しますが、ラムダ実行時に現在のiの値が使われます。ループが終わるとiは2になっているので funcs[0](2) は2*2=4を返します。対策としてはラムダ作成時にデフォルト引数でiの値を固定する(lambda x, i=i: i*x)などがあります。以上より出力は4です。