Im Moment bin ich auf Amrum, draußen liegt Schnee und ich programmiere in Python. Ich habe gerade lange einen Bug in meinem Code gesucht, der sich aus für mich überraschenden Seiteneffekten in Python ergab. Folgendes Skript demonstriert das:
n = 10
l = range(0, n)
lazyList = []
for i in range(0, n):
lazyList.append((lambda x: x[i], l))
resultList = []
for (fun, x) in lazyList:
resultList.append(fun(x))
print(resultList)
Das Ergebnis ist wider Erwarten:
Die mit lambda erstellten Funktionen verändern also ihr verhalten, weil sie anscheinend auf i referenzieren und nicht den Wert abspeichern. Ist das gewollt? Oder ein Bug im Python-Interpreter? In beiden Fällen, wie kann man das umgehen?[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]