Python >> Tutoriel Python >  >> Python

Python global en une seule ligne

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ée this.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 .