Maison >développement back-end >Tutoriel Python >Pourquoi l'exécution ne met-elle pas à jour les variables locales dans Python 3 et comment puis-je y remédier ?
Problème :
Lors de l'utilisation d'exec dans Python 3 pour exécuter une chaîne de code dans une fonction, les variables locales dans la fonction ne sont pas mises à jour. Ce problème survient en raison de l'optimisation efficace du stockage des variables locales par Python 3.
Exemple :
def f(): a = 1 exec("a = 3") print(a) f()
Ce code devrait imprimer 3 mais imprime 1 à la place.
Solution :
Pour modifier les variables locales à l'aide de exec, un dictionnaire local explicite doit être transmis. Ceci peut être réalisé comme suit :
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Explication :
Python 3 stocke les variables locales dans un tableau pour optimiser leur accès. Cependant, le comportement par défaut de exec ne permet pas la modification des variables locales. En passant un dictionnaire local explicite, les variables peuvent être attribuées au dictionnaire et leurs valeurs modifiées sont accessibles via celui-ci.
Python 2 vs Python 3 :
Dans Python 2, ce comportement fonctionnait comme prévu grâce à un mécanisme d'optimisation qui permettait aux fonctions avec exec d'avoir un stockage de variables locales non optimisé. Cependant, dans Python 3, cette optimisation n'est plus possible, conduisant au comportement observé.
Remarque :
Il est important de se rappeler que la transmission d'un dictionnaire local explicite doit ne doit être effectué que lorsque cela est nécessaire, car cela supprime l'avantage d'optimisation offert par la gestion par défaut des variables locales de Python 3.
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!