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?

Donnerstag, 8. Januar 2009

Scrubs

Es gibt neue Folgen von Scrubs. Mit Monika Chandler-Bing als Dr. Kelso.