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 ?

Pourquoi l'exécution ne met-elle pas à jour les variables locales dans Python 3 et comment puis-je y remédier ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 20:20:11790parcourir

Why Doesn't exec Update Local Variables in Python 3, and How Can I Fix It?

Comment mettre à jour les variables locales à l'aide d'exec dans Python 3

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!

Déclaration:
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