Comment mettre à jour les variables locales à l'aide d'exec en Python
La fonction exec en Python permet d'exécuter dynamiquement le code au moment de l'exécution. Cependant, lorsque vous utilisez exec pour attribuer des valeurs à des variables locales, certains comportements peuvent être inattendus.
Le problème dans Python 3
Dans Python 3, le code suivant imprime 1 au lieu du 3 attendu :
def f(): a = 1 exec("a = 3") print(a) f()
Cela est dû au fait que dans Python 3, la fonction exec modifie par défaut l'espace de noms global. Pour modifier les variables locales, un dictionnaire local explicite doit être fourni.
Solution en Python 3
La bonne façon de mettre à jour les variables locales à l'aide d'exec dans Python 3 est :
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Python 2 contre Python 3 Comportement
Dans Python 2, le code d'origine se comportait comme prévu car il supposait que la fonction exec modifierait l'espace de noms local. Cependant, Python 3 a modifié ce comportement à des fins d'optimisation.
Détails techniques
Dans Python 3, les variables locales sont généralement stockées dans un tableau, pas dans un dictionnaire. Cette optimisation évite la surcharge liée à la maintenance d'un dictionnaire pour les variables locales. Cependant, cela restreint également la capacité de exec à modifier directement les variables locales.
En fournissant un dictionnaire local explicite, la fonction exec est chargée d'exécuter le code dans cet espace de noms, permettant ainsi la mise à jour des variables locales.
Conclusion
Pour mettre à jour les variables locales à l'aide de exec dans Python 3, un dictionnaire local explicite doit être fourni. Cela garantit que la modification se produit dans le bon espace de noms et empêche un comportement inattendu du code.
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!