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
Libérer: 2024-12-14 20:20:11
original
794 Les gens l'ont consulté

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()
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal