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
Libérer: 2024-12-06 01:58:10
original
684 Les gens l'ont consulté

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

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

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!

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