Heim > Artikel > Backend-Entwicklung > Wie verhält sich die Funktion „exec“ in Python 2 und Python 3 unterschiedlich?
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.
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.
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.
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.
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!