Heim >Backend-Entwicklung >Python-Tutorial >Warum ändert mein Python-Listenverständnis den Wert meiner Variablen?

Warum ändert mein Python-Listenverständnis den Wert meiner Variablen?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 12:08:11938Durchsuche

Why Does My Python List Comprehension Change My Variable's Value?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn