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'])
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!