Posts mit dem Label Python werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Python werden angezeigt. Alle Posts anzeigen

Freitag, 23. Januar 2009

Seiteneffekte in Python

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:

[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
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?