昆布大好き!

主にプログラミングの技メモ

失敗しました Pythonでラムダ式

Pythonでプラス1する関数、プラス2する関数、…のリストを作ろうとして失敗しました。

#悪い例
ys = []
for i in range(4) :
    ys.append( lambda x: print(i+x) )
for f in ys :
    f(10)
print()
#良い例
ys = list(map( lambda x: lambda x2: print(x2+x), range(4) ))
for f in ys :
    f(10)

実行した結果は、

13
13
13
13

10
11
12
13

Windwos 8 64-bit, Python 3.4.2の結果です。

よくよく考えなおせば、まあ、そうなるな、という気がしてきます。

下半分をずうずうしく「良い例」などと書いてはいますが、はずかしいです。