Heim >Backend-Entwicklung >Python-Tutorial >Warum ändert mein Python-Listenverständnis den Wert meiner Variablen?
Unerwartetes Verhalten: Listenverständnisse verändern den Variablenbereich
Python-Listenverständnisse sind leistungsstarke Werkzeuge zur Datenmanipulation, haben jedoch eine versteckte Eigenart kann zu unerwartetem Verhalten führen.
Die Problem
In Python 2 (und früher) können Listenverständnisse die Schleifenkontrollvariable an den letzten Wert der Schleife „neu binden“, selbst nachdem der Umfang des Verständnisses beendet ist. Dies kann zu überraschendem Verhalten führen:
x = "original value" squares = [x**2 for x in range(5)] print(x) # Prints 4 in Python 2!
In diesem Beispiel wird die Schleifenkontrollvariable x innerhalb des Listenverständnisses dem letzten Wert der Schleife (4) neu zugewiesen. Das heißt, wenn print(x) außerhalb des Verständnisses aufgerufen wird, wird 4 statt „Originalwert“ ausgegeben.
Erklärung
Das oben beschriebene Verhalten ist ein Ergebnis Die Art und Weise, wie Listenverständnisse ursprünglich in Python 2 implementiert wurden. Um das Listenverständnis so effizient wie möglich zu gestalten, wurde die Schleifenkontrollvariable in die Umgebung durchgesickert Geltungsbereich.
Python 3-Korrektur
In Python 3 wurde dieses Verhalten geändert. Listenverständnisse binden die Schleifenkontrollvariable außerhalb des Verständnisses nicht mehr erneut. Dies wurde durchgeführt, um die Konsistenz zwischen Listenverständnissen und Generatorausdrücken zu verbessern, die die Schleifenkontrollvariable niemals erneut binden.
Guido van Rossums Erklärung
Guido van Rossum, der Ersteller von Python, erläuterte die Gründe für diese Änderung in Python 3:
„Wir haben beschlossen, das „schmutzige kleine Problem“ zu beheben Geheimnis“ von Listenverständnissen, indem dieselbe Implementierungsstrategie wie für Generatorausdrücke verwendet wird. Daher wird in Python 3 das obige Beispiel... „before“ ausgeben, was beweist, dass das „x“ im Listenverständnis vorübergehend verdeckt, aber nicht überschreibt das 'x' im umgebenden Bereich Obwohl dies zunächst kontraintuitiv erscheint, ist es wichtig zu verstehen, wie sie sowohl in Python 2 als auch in Python 3 funktionieren. Dieses Wissen wird Ihnen helfen, potenzielle Fehler zu vermeiden und robusteren Code zu schreiben.
Das obige ist der detaillierte Inhalt vonWarum ändert mein Python-Listenverständnis den Wert meiner Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!