Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verhält sich die Funktion „exec“ in Python 2 und Python 3 unterschiedlich?

Wie verhält sich die Funktion „exec“ in Python 2 und Python 3 unterschiedlich?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-12 15:07:01572Durchsuche

How does the `exec` function behave differently in Python 2 and Python 3?

Verhalten der exec-Funktion in Python 2 und Python 3

Die exec-Funktion zeigt ein unterschiedliches Verhalten zwischen Python 2 und Python 3. In Python 2 ist exec eine Anweisung, Während es in Python 3 in eine Funktion umgewandelt wurde. Diese Unterscheidung hat erhebliche Auswirkungen auf die Interaktion mit lokalen Variablen.

Python 2-Verhalten

In Python 2 ermöglicht die exec-Anweisung die Änderung lokaler Variablen innerhalb des Gültigkeitsbereichs einer Funktion. Wenn die exec-Anweisung ausgeführt wird, deaktiviert der Python-Compiler vorübergehend lokale Bereichsoptimierungen und wechselt zu einer langsameren Suchstrategie, um sowohl auf lokale als auch auf globale Variablen zuzugreifen. Darüber hinaus werden alle in der exec-Anweisung deklarierten Variablen automatisch zurück in die lokalen Variablen der Funktion kopiert, wenn keine expliziten globalen und lokalen Parameter bereitgestellt werden.

Python 3-Verhalten

In Python 3 ist exec() Die Funktion folgt strikt den Regeln des Funktionsumfangs. Variablen im lokalen Bereich einer Funktion können nicht mehr geändert werden, selbst wenn sie zuvor deklariert wurden. Locals() ist in der Lage, lokale Variablen in eine Richtung zu reflektieren, aber das Zulassen von Änderungen durch locals() wurde nie unterstützt.

Richtige Problemumgehung

Um das gewünschte in Python 2 beobachtete Verhalten zu erreichen, ist es Beim Aufruf von exec() in Python 3 muss ein separater Namespace verwendet werden. Durch die Übergabe eines benutzerdefinierten Wörterbuchs an die Funktion exec() ist es möglich, Variablen darin zu ändern und darauf zuzugreifen Namespace.

Beispielcode

Der folgende Code zeigt die ordnungsgemäße Verwendung von exec() in Python 3:

def execute(a, st):
    namespace = {}
    exec("b = {}\nprint('b:', b)".format(st), namespace)
    print(namespace['b'])

Dieser Ansatz stellt sicher, dass der lokale Bereich des Die Funktion bleibt erhalten, ermöglicht jedoch weiterhin Änderungen an Variablen innerhalb des definierten Namespace.

Das obige ist der detaillierte Inhalt vonWie verhält sich die Funktion „exec“ in Python 2 und Python 3 unterschiedlich?. 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