Comment utiliser les variables globales en Python (mot-clé global)

Découvrez comment fonctionnent les variables globales en Python. Comprenez la portée des variables, les espaces de noms locaux et globaux et comment modifier les variables à l'aide du mot-clé global.

Essayez cette solution dans l'éditeur

Aperçu

Comprendre les espaces de noms et la portée des variables est essentiel pour écrire un logiciel sans bug en Python. La portée détermine quelles parties de votre programme peuvent accéder ou modifier une variable. Une variable déclarée en dehors de toutes les fonctions existe dans la portée globale et peut être lue n'importe où dans le module.

Cependant, un problème survient lorsqu'une fonction tente de modifier (réaffecter) une variable globale. Par défaut, lorsque Python voit une affectation dans une fonction, il suppose que cette variable est locale à la fonction. Si vous essayez de modifier une variable globale sans la déclarer comme globale, Python créera une variable locale avec le même nom, laissant la variable globale inchangée (ou déclenchera une `UnboundLocalError`).

Pour indiquer explicitement à Python que vous souhaitez modifier une variable dans l'espace de noms global plutôt que d'en créer une locale, vous devez la déclarer en utilisant le mot-clé `global` à l'intérieur de la fonction. Bien que l'utilisation de variables globales soit parfois nécessaire, elle est généralement considérée comme une mauvaise pratique dans la conception de logiciels de grande envergure, car elle rend l'état difficile à suivre et à déboguer.

Sortie de code et d'exécution

Ce script montre la lecture des variables globales, le piège d'observation des variables et la modification des variables globales à l'aide du mot-clé global.

global_variables.py
Essayez dans l'éditeur
counter = 10 # Global variable

def read_counter():
    # Reading a global variable works out-of-the-box
    print("Reading global counter:", counter)

def shadow_counter():
    # Attempting to assign without 'global' creates a local variable
    counter = 20 # Shadowing
    print("Inside shadow function:", counter)

def modify_counter():
    global counter # Declaring we are writing to global scope
    counter = 50
    print("Inside modify function:", counter)

read_counter()
shadow_counter()
print("Counter after shadow function:", counter) # Remains 10

modify_counter()
print("Counter after modify function:", counter) # Now 50
Sortie terminale
Reading global counter: 10
Inside shadow function: 20
Counter after shadow function: 10
Inside modify function: 50
Counter after modify function: 50

Mise en œuvre étape par étape

  • Déclarez les variables auxquelles il faut accéder globalement en dehors de toute portée de fonction.
  • Lisez les variables globales dans n'importe quelle fonction sans ajouter de déclarations spéciales.
  • Utilisez le mot-clé global (par exemple, compteur global) dans les fonctions si vous devez modifier la valeur de la variable globale.
  • Limitez l’utilisation des variables globales pour éviter toute confusion de portée et toute pollution de l’espace de noms.

Foire aux questions

Qu’est-ce que l’observation variable en Python ?

L'observation se produit lorsqu'une variable déclarée dans une portée locale (comme une fonction) porte le même nom qu'une variable dans une portée globale externe. La variable locale masque la variable globale, la rendant temporairement inaccessible à l'intérieur de cette portée.

Quelle est la différence entre les mots-clés globaux et non locaux ?

global est utilisé pour accéder aux variables définies dans la portée du module le plus externe. nonlocal est utilisé dans des fonctions imbriquées pour accéder aux variables définies dans la portée de la fonction englobante (externe).

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.