Wie unterscheidet sich das Verhalten von Exec-Funktionen zwischen Python 2 und Python 3?

Linda Hamilton
Freigeben: 2024-11-14 22:02:02
Original
814 Leute haben es durchsucht

How Does Exec Function Behavior Differ Between Python 2 and Python 3?

Exec-Funktionsverhalten in Python 2 im Vergleich zu Python 3

Die exec-Anweisung weist deutliche Unterschiede im Verhalten zwischen Python 2 und Python 3 auf. In Python 2 fungierte exec als Anweisung und änderte effektiv lokale Variablen innerhalb des Funktionsumfangs.

In Python 3 jedoch exec() wird zu einer Funktion. Dies verhindert die Änderung lokaler Variablen innerhalb von Funktionen, obwohl dies in Python 2 möglich ist. Darüber hinaus sind selbst zuvor deklarierte Variablen nicht änderbar.

Die Funktion locals() ermöglicht nur die einseitige Aktualisierung lokaler Variablen. Zum Beispiel im folgenden Python 2-Code:

def foo():
    a = 'spam'
    locals()['a'] = 'ham'
    print(a)              # prints 'spam'
Nach dem Login kopieren

Die Zuweisung von 'ham' zu locals()['a'] hat keinen Einfluss auf den Wert der Variablen 'a' innerhalb der Funktion und „Spam“ bleibt gedruckt.

In Python 2 kopierte exec mithilfe von PyFrame_LocalsToFast die in locals() gefundenen Variablen explizit zurück in die Funktion locals. In Python 3 ist dieses Verhalten jedoch nicht mehr möglich.

Um das gewünschte Verhalten in Python 3 zu erreichen, muss man während des exec()-Aufrufs einen neuen Namespace (z. B. ein Wörterbuch) verwenden. Dies ist im folgenden Python 3-Code zu sehen:

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

In der exec()-Dokumentation werden ausdrücklich die Einschränkungen aufgeführt, die der Verwendung von locals() auferlegt werden:

"Hinweis: Die Standard-Locals verhalten sich als unten für die Funktion locals() beschrieben: Änderungen am Standard-Locals-Wörterbuch sollten nicht versucht werden, ein explizites Locals-Wörterbuch zu übergeben, wenn Sie die Auswirkungen des Codes auf Locals nach der Funktion exec() sehen möchten. kehrt zurück.

Das obige ist der detaillierte Inhalt vonWie unterscheidet sich das Verhalten von Exec-Funktionen zwischen Python 2 und Python 3?. 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