Unten ist ein Beispiel, das ich von jemandes Blog über Python-Schließung bekommen habe. Ich führe es in Python 2.7 und bekomme eine andere Ausgabe als erwartet.
%Vor% Meine erwartete Ausgabe ist: 0, 2, 4
Aber die Ausgabe ist: 4, 4, 4
Gibt es jemanden, der es erklären könnte?
Vielen Dank im Voraus.
Schleifen führen in Python keinen Bereich ein, daher schließen sich alle drei Funktionen über die gleiche i
Variable und beziehen sich auf den letzten Wert, nachdem die Schleife beendet ist, was 2 ist.
Es scheint so, als ob fast jeder, mit dem ich rede, der Closures in Python benutzt, davon gebissen wurde. Die logische Folge ist, dass die äußere Funktion i
ändern kann, aber die innere Funktion nicht (da dies i
zu einer lokalen statt einer Schließung machen würde, basierend auf Pythons syntaktischen Regeln).
Es gibt zwei Möglichkeiten, dies zu beheben:
%Vor% Jede Funktion greift auf das globale i
zu.
functools.partial kommt zur Rettung:
%Vor%