Heim  >  Artikel  >  Backend-Entwicklung  >  Wie unterscheidet sich das Verhalten der Funktion „exec“ in Python 2 und Python 3?

Wie unterscheidet sich das Verhalten der Funktion „exec“ in Python 2 und Python 3?

Linda Hamilton
Linda HamiltonOriginal
2024-11-18 06:27:02105Durchsuche

How Does the Behaviour of the `exec` Function Differ in Python 2 and Python 3?

Verhalten der exec-Funktion in Python 2 vs. Python 3

In Python 2 und Python 3 weist die exec-Funktion bemerkenswerte Unterschiede im Verhalten auf .

Grund dafür Unterschied

In Python 2 war exec eine Anweisung, die lokale Bereichsoptimierungen explizit deaktivierte und den Zugriff auf Variablen sowohl im lokalen als auch im globalen Bereich ermöglichte. Im Gegensatz dazu ist exec() von Python 3 eine Funktion, die Funktionsbereiche immer optimiert.

Auswirkungen auf die Variablenbindung

In Python 2 werden bei Verwendung der exec-Anweisung Variablen verwendet gefunden in locals() wurden zurück in die Funktion locals kopiert. Dies führte dazu, dass die Variable innerhalb der Funktion an die in der exec-Anweisung angegebenen Werte gebunden wurde.

In Python 3 weist exec() dieses Verhalten jedoch standardmäßig nicht auf. Daher sind Variablen innerhalb der Funktion nicht an die in der exec()-Anweisung gebunden.

Zugriff auf lokale Variablen

So greifen Sie mit exec() in Python 3 auf lokale Variablen zu , sollte ein neuer Namespace (normalerweise ein Wörterbuch) erstellt und als Argument an die Funktion übergeben werden.

Überarbeitet Code

Unten finden Sie ein überarbeitetes Codebeispiel, das die korrekte Verwendung von exec() in Python 3 demonstriert, um das Verhalten von Python 2 zu erreichen:

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

In diesem Code a Das Wörterbuch mit dem Namen Namespace wird erstellt und an exec() übergeben. Auf alle in der exec()-Anweisung definierten Variablen kann über das Wörterbuch zugegriffen werden.

Hinweise

In der exec()-Dokumentation wird ausdrücklich davor gewarnt, Änderungen am standardmäßigen Locals-Wörterbuch vorzunehmen , da es möglicherweise keine Änderungen widerspiegelt, die innerhalb des exec()-Aufrufs vorgenommen wurden.

Das obige ist der detaillierte Inhalt vonWie unterscheidet sich das Verhalten der Funktion „exec“ in Python 2 und Python 3?. 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