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

Comment puis-je mettre à jour les variables locales dans la fonction « exec » de Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 01:58:10723parcourir

How Can I Update Local Variables Within Python's `exec` Function?

Surmonter les limitations de mise à jour des variables avec Python Exec

En Python, la fonction exec permet l'exécution dynamique du code Python au moment de l'exécution. Cependant, lorsqu'il est utilisé avec des variables locales, il peut se comporter de manière inattendue.

Le problème :

Considérez le code suivant :

def f():
    a = 1
    exec("a = 3")
    print(a)

f()

En Python 2, ce code imprimerait 3, indiquant que la variable locale a a été mise à jour dans l'appel exec. Cependant, dans Python 3, il imprime 1, ce qui soulève la question de savoir comment mettre à jour les variables locales lors des appels d'exécution.

La solution :

Pour résoudre ce problème, vous devez transmettre explicitement un dictionnaire locals à la fonction exec :

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)

En utilisant locals(), vous créez un nouvel espace de noms de variable locale pour le appel exécutif. Les modifications apportées à cet espace de noms seront reflétées dans la portée locale de la fonction foo.

Points clés :

  • Python 3 optimise le stockage des variables locales, affectant le comportement de exec .
  • Le dictionnaire local par défaut pour exec ne peut pas être modifié en Python 3.
  • L'utilisation d'un dictionnaire local explicite permet des mises à jour de variables locales dans les appels d'exécution.

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