2012-10-11 7 views

Antwort

5

Sie einen Parameter mit einem Standardwert verwenden können auf der Lambda:

for i in range(0, 2): 
    items.append(lambda i=i: dump(i)) 

Dies funktioniert, weil der Standardwert ausgewertet wird, wenn die Funktion definiert ist, nicht wenn sie aufgerufen wird.

+0

Mann, Sie klug sind. Dies war ein Beispiel, aber Sie haben eine Problemumgehung gefunden. Der Punkt war, wie dieser Verweis auf die Lambda-Definition ausgewertet werden kann. Gibt es eine Möglichkeit, das zu tun? – bradojevic

4

können Sie verwenden:

for i in range(0, 2): 
    items.append(lambda i=i: dump(i)) 

den aktuellen Wert von i

Dies funktioniert zu erfassen, da Standard-Parameterwerte in Funktion Erstellungszeit ausgewertet werden, und i ist nicht die externe Variable, sondern eine Funktion Parameter, der standardmäßig den gewünschten Wert hat.

Eine genauere Erklärung finden Sie in dieser answer.

0

Der Ausgabewert ist der Wert von i bei der Auswertung der Funktion, nicht bei ihrer Deklaration. Deshalb erhalten Sie nicht das gewünschte Ergebnis.

1

Der Vollständigkeit halber können Sie auch tun:

for i in range(0, 2): 
    items.append((lambda i: lambda: dump(i))(i)) 
+0

Ich denke, diese Antwort ist am wenigsten hacky, obwohl sie ausführlicher ist als die Standardantwort. – max