Maison >développement back-end >Tutoriel Python >En quoi le comportement de « exec » diffère-t-il entre Python 2 et Python 3 ?
Comportement de exec dans Python 2 et Python 3
Dans Python 2, l'instruction exec agissait comme une instruction, permettant aux développeurs d'exécuter dynamiquement Code Python. Cependant, dans Python 3, exec est devenu une fonction, exec(), ce qui entraîne certaines différences de comportement.
Comportement de la fonction Exec
Une distinction notable est la gestion des variables. Dans Python 2, l'utilisation de l'instruction exec pouvait modifier les variables locales dans la portée de la fonction. Par exemple :
def test(): a = 42 exec("a = 100") print(a) # Output: 100
Cependant, dans Python 3, cette fonctionnalité n'est plus disponible. L'exécution de code à l'aide de la fonction exec() ne modifie pas les variables locales, même si elles sont préalablement déclarées. En effet, les portées des fonctions sont toujours optimisées dans Python 3.
Atteindre le comportement de Python 2 dans Python 3
Pour reproduire le comportement de Python 2, où exec modifie les variables locales , Python 3 propose une approche différente. Les développeurs doivent utiliser un nouvel espace de noms au lieu de la portée locale. Cela peut être fait en créant un dictionnaire et en le transmettant à la fonction exec() :
def test(): a = 42 namespace = {} exec("a = 100", namespace) print(a) # Output: 42 print(namespace['a']) # Output: 100
Dans cet exemple, la fonction exec() utilise le dictionnaire d'espace de noms pour la manipulation des variables. L'espace de noms est ensuite utilisé pour récupérer la valeur modifiée de 'a'.
Coercition des variables locales
Dans Python 3, certaines variables contraintes peuvent provoquer un comportement inattendu avec exec . L'exemple suivant le démontre :
def test(): a = 42 d = locals() exec("a = 100\nprint('b:', a)", globals(), d) print(a) # Output: 42 print(d['a']) # Output: 100
Ici, la variable « a » à l'intérieur de la fonction exec() est contrainte à la variable « b », ce qui entraîne l'impression d'une valeur différente. Ceci illustre les limites de locals() pour influencer les variables déclarées à l'aide de 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!