Maison > développement back-end > Tutoriel Python > Pourquoi « exec » ne peut-il pas mettre à jour directement les variables locales dans Python 3 ?

Pourquoi « exec » ne peut-il pas mettre à jour directement les variables locales dans Python 3 ?

Patricia Arquette
Libérer: 2024-12-20 19:54:12
original
853 Les gens l'ont consulté

Why Can't `exec` Directly Update Local Variables in Python 3?

Comment les variables locales ne peuvent pas être mises à jour directement avec exec

L'appel exec en Python est un outil puissant pour exécuter du code de manière dynamique, mais il comporte des limitations concernant la modification des variables locales.

Considérez ce qui suit code :

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

f()
Copier après la connexion

On pourrait s'attendre à ce que ce code imprime 3, mais il imprime en réalité 1. En effet, dans Python 3, les variables locales ne sont pas stockées dans un dictionnaire, mais dans un tableau avec des indices déterminés lors de la compilation. temps. La fonction exec ne peut pas modifier en toute sécurité les variables locales sans interférer avec cette optimisation.

Solution : Utiliser le dictionnaire local avec exec

Pour modifier les variables locales à l'aide de exec, vous devez pour transmettre explicitement un dictionnaire local. Par exemple :

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)
Copier après la connexion

Cela exécute le code dans le dictionnaire local (ldict), qui est distinct du tableau de variables locales de la fonction. La variable modifiée peut ensuite être renvoyée dans la portée de la fonction en accédant au dictionnaire local.

Comportement Python 2

Dans Python 2, exec pouvait modifier les variables locales sans passer un dictionnaire explicite car il traitait les espaces de noms qui utilisaient exec sans arguments globals/locals comme « non optimisés ». Cependant, ce n'est pas le cas dans Python 3.

Par conséquent, il est important de se rappeler que lors de l'utilisation de exec, les variables locales ne peuvent être mises à jour qu'en créant et en passant un dictionnaire local pour éviter tout conflit potentiel avec les optimisations du compilateur. .

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