Heim > Backend-Entwicklung > Python-Tutorial > Warum bindet das Listenverständnis von Python 2 Namen außerhalb seines Geltungsbereichs neu?

Warum bindet das Listenverständnis von Python 2 Namen außerhalb seines Geltungsbereichs neu?

Patricia Arquette
Freigeben: 2024-11-29 12:41:10
Original
347 Leute haben es durchsucht

Why Does Python 2's List Comprehension Rebind Names Outside Its Scope?

Das unerwartete Verhalten von Listenverständnissen: Rebound-Namen und der verschwommene Geltungsbereich

Pythons Listenverständnisse bieten eine prägnante und bequeme Möglichkeit, Listen zu erstellen, Aber sie bergen eine versteckte Gefahr: Namen neu zu verknüpfen, sogar über den Rahmen des eigentlichen Verständnisses hinaus. In Python 2 war dieses eigenartige Verhalten eine Quelle von Frustration und Programmierfehlern.

Bedenken Sie den folgenden Code:

x = "original value"
squares = [x**2 for x in range(5)]
print(x)  # Prints 4 in Python 2!
Nach dem Login kopieren

In Python 2 wird bei der Ausführung dieses Codes unerwartet 4 statt ausgegeben „ursprünglicher Wert“. Dies liegt daran, dass das Listenverständnis die Schleifenkontrollvariable x in den umgebenden Bereich verliert und ihren ursprünglichen Wert überschreibt.

Dieses Verhalten ergibt sich aus der Art und Weise, wie Listenverständnisse in Python 2 implementiert wurden: als Optimierung zur Verbesserung ihrer Effizienz. Für Python-Programmierer war es jedoch ein erhebliches Problem, das zu Fehlern und Verwirrung führte.

Glücklicherweise wurde dieses „schmutzige kleine Geheimnis“ in Python 3 beseitigt. Listenverständnisse verwenden jetzt dieselbe Implementierungsstrategie wie Generatorausdrücke, die einen separaten Ausführungsrahmen verwenden. Folglich gibt das obige Codefragment in Python 3 den „Originalwert“ wie erwartet korrekt aus, da das x im Verständnis das x im umgebenden Bereich nicht überschattet.

Guido van Rossum, der Erfinder von Python, erklärte die Gründe für diese Änderung:

"[Wir haben diese Änderung vorgenommen, um] das 'schmutzige kleine Geheimnis' des Listenverständnisses zu lüften, indem wir dieselbe Implementierungsstrategie wie für verwenden Generatorausdrücke.“

Dieses verbesserte Verhalten in Python 3 ist ein Beweis für die ständige Weiterentwicklung und Verfeinerung der Python-Sprache und sorgt für mehr Klarheit und Vorhersehbarkeit bei der Verwendung des Listenverständnisses.

Das obige ist der detaillierte Inhalt vonWarum bindet das Listenverständnis von Python 2 Namen außerhalb seines Geltungsbereichs neu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage