Verzögerte Auswertung mit Lambda in Python

7

In einer Schleife versuche ich, den Vergleich der zwei value () s zweier Knoten zu einem späteren Zeitpunkt zu verschieben.

%Vor%

Die Ergebnisse sind alle wahr (weil i, j == 2,5 für alle Lambdas). Wie kann ich die Ausführung des Lambda verzögern, bis es tatsächlich aufgerufen wird, aber mit den richtigen Variablenbindungen? Und die Ausdrücke im Lambda sind nicht notwendigerweise alle gleichwertig ... es gibt eine Menge anderer mehr beteiligter Ausdrücke.

Danke für jede Hilfe!

    
Albeit 18.06.2012, 16:26
quelle

3 Antworten

11

Um die aktuellen Werte von i und j an die Funktion zu binden, anstatt sie im äußeren Bereich anzuzeigen, können Sie entweder eine Closure- oder Standardargumentwerte verwenden. Der einfachste Weg, dies zu tun, ist die Verwendung von Standard-Argument-Werten in Ihrem Lambda:

%Vor%

So würde es aussehen wie eine Schließung:

%Vor%     
Andrew Clark 18.06.2012, 16:31
quelle
5

Wickle es in ein anderes Lambda:

%Vor%

oder auf eine schönere Weise, mit partial :

%Vor%

Der Standardargumentstrick ist, nun ... ein Trick, und ich würde vorschlagen, es zu vermeiden.

    
georg 18.06.2012 16:42
quelle
3

Die idiomatische Methode besteht darin, ein Standardargument zu verwenden:

%Vor%

Ändern Sie dies zu:

%Vor%     
ecatmur 18.06.2012 16:38
quelle