En quoi le comportement de la fonction « exec » diffère-t-il dans Python 2 et Python 3 ?

Linda Hamilton
Libérer: 2024-11-18 06:27:02
original
107 Les gens l'ont consulté

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

Comportement de la fonction exec dans Python 2 par rapport à Python 3

Dans Python 2 et Python 3, la fonction exec présente des différences de comportement notables .

Raison de la différence

Dans Python 2, exec était une instruction qui désactivait explicitement les optimisations de portée locale et autorisait l'accès aux variables dans les portées locales et globales. En revanche, exec() de Python 3 est une fonction qui optimise toujours les portées des fonctions.

Impact sur la liaison des variables

Dans Python 2, lors de l'utilisation de l'instruction exec, les variables trouvés dans locals() ont été copiés dans la fonction locals. Cela a entraîné la liaison de la variable à l'intérieur de la fonction aux valeurs spécifiées dans l'instruction exec.

Dans Python 3, cependant, exec() n'a pas ce comportement par défaut. Par conséquent, les variables à l'intérieur de la fonction ne sont pas liées à celles de l'instruction exec().

Accès aux variables locales

Pour accéder aux variables locales à l'aide de exec() dans Python 3 , un nouvel espace de noms (généralement un dictionnaire) doit être créé et passé comme argument à la fonction.

Révisé Code

Vous trouverez ci-dessous un exemple de code révisé qui démontre l'utilisation correcte de exec() dans Python 3 pour obtenir le comportement de Python 2 :

def execute(a, st):
    namespace = {}
    exec("b = {}\nprint('b:', b)".format(st), namespace)
    print(namespace['b'])
Copier après la connexion

Dans ce code, un le dictionnaire nommé espace de noms est créé et transmis à exec(). Toutes les variables définies dans l'instruction exec() seront accessibles via le dictionnaire.

Notes

La documentation exec() met explicitement en garde contre toute tentative de modification du dictionnaire local par défaut. , car cela peut ne pas refléter les modifications apportées lors de l'appel exec().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal