Wie erstelle ich eine Liste von Python Lambda-Ausdrücke (in einer Liste verstehen/for-Schleife)?

Ich möchte eine Liste erstellen von lambda-Objekte aus einer Liste von Konstanten in Python; zum Beispiel:

listOfNumbers = [1,2,3,4,5]
square = lambda x: x * x
listOfLambdas = [lambda: square(i) for i in listOfNumbers]

Dadurch wird eine Liste der lambda-Objekte, jedoch, wenn ich Sie laufen:

for f in listOfLambdas:
    print f(),

Ich würde erwarten, dass es drucken würde

1 4 9 16 25

Statt, druckt er:

25 25 25 25 25

Es scheint, als ob die lambdas haben alle die falschen parameter. Habe ich etwas falsch gemacht, und gibt es eine Möglichkeit es zu beheben? Ich bin in Python 2.4, denke ich.

EDIT: ein bisschen mehr versucht, Dinge, und so kam mit dieser:

listOfLambdas = []
for num in listOfNumbers:
    action = lambda: square(num)
    listOfLambdas.append(action)
    print action()

Druckt die erwartete Quadrate von 1 bis 25, dann aber mit der früheren print-Anweisung:

for f in listOfLambdas:
    print f(),

gibt mir immer noch alle 25s. Wie hat sich die vorhandene lambda-Objekte sich ändern, zwischen den beiden print-Anrufe?

Verwandte Frage: Warum Ergebnisse von map() und list-comprehension unterschiedlich sind?

InformationsquelleAutor Smashery | 2009-01-17
Schreibe einen Kommentar