Pour mettre à jour une variable globale dans une ligne de Python, récupérez le dictionnaire de variables globales avec le globals()
fonction et accédez à la variable en transmettant le nom de la variable sous forme de clé de chaîne telle que globals()['variable']
. Puis écrasez la variable globale en utilisant le symbole égal, par exemple dans globals()['variable'] = 42
pour écraser la variable avec la valeur 42
.
Plongeons plus en détail dans ce défi crucial !
Problème :L'approche courante pour mettre à jour une variable globale prend deux lignes dans la portée interne (dans notre exemple, la fonction update()
).
a = 42 def update(): global a a = 21 update() print(a) # 21
Est-ce vraiment nécessaire ? Ne pouvez-vous pas mettre à jour la variable globale a
en une seule ligne de code ?
Vous voudrez peut-être rechercher quelque chose comme ceci :
# WRONG: global a = 21
Mais c'est une syntaxe incorrecte en Python. Comment mettre à jour la variable globale en une seule ligne ?
Plongeons dans plusieurs méthodes pour y parvenir. Tout d'abord, essayez-les vous-même dans notre shell Python interactif :
Exercice :Les quatre méthodes mettent-elles à jour la variable globale ?
Méthode 1 :point-virgule
def update_1(): global a; a = 21
Le point-virgule vous permet d'écrire plusieurs expressions Python sur une seule ligne et de les exécuter en séquence.
Article connexe : Comment exécuter plusieurs lignes de Python en une seule ligne ?
Méthode 2 :sys.modules[__name__]
# Method 2 import sys this = sys.modules[__name__] this.a = 42 def update_2(): this.a = 21
Le code passe par les étapes suivantes :
- Importer le
sys
bibliothèque. - Attribuez le module dans lequel vous exécutez ce code à la variable
this
. - Accéder à la variable globale
a
par la notation pointéethis.a
.
En faisant cela, vous travaillez avec des qualifiés noms de variables (noms nus ) plutôt qu'implicite noms de variables. Cela réduit la probabilité d'erreurs et constitue un moyen propre de résoudre ce problème. De cette façon, vous pouvez éviter d'utiliser le global
mot-clé au total, ce qui peut améliorer la lisibilité de votre code.
Méthode 3 :globals()[var]
def update_3(): globals()['a'] = 21
Le code accède d'abord à toutes les variables globales en utilisant le globals()
fonction qui renvoie un dictionnaire mappant les noms aux objets. Vous accédez à la valeur associée à la clé 'a'
. La valeur de retour est l'objet auquel la variable globale a
points.
Méthode 4 :point-virgule
def update_4(): globals().update(a=21)
Ce code est très similaire au code précédent de la Méthode 3 . Vous utilisez le dictionnaire update()
au lieu de la méthode d'indexation pour écraser la valeur de la variable globale a
.