Maison >développement back-end >Tutoriel Python >Comment mettre à jour correctement les variables locales avec la fonction « exec » de Python ?

Comment mettre à jour correctement les variables locales avec la fonction « exec » de Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 13:47:11535parcourir

How to Correctly Update Local Variables with Python's `exec` Function?

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!

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