Gérer l’étendue des variables

Terminée

Pourboire

Pour plus d’informations, consultez l’onglet Texte et images !

L’étendue est la région de votre code où existe une variable et peut être utilisée. La compréhension de l’étendue vous permet d’écrire des fonctions qui n’interfèrent pas accidentellement les uns avec les autres et vous aident à éviter toute une classe de bogues confus.

Variables locales

Une variable créée à l’intérieur d’une fonction est une variable locale. Il n’existe que pendant l’exécution de la fonction et n’est pas visible depuis l’extérieur de la fonction.

def calculate_total(price, tax):
    total = price + tax     # `total` is local to this function
    return total

calculate_total(10, 2)
print(total)                # NameError: name 'total' is not defined

Chaque appel à une fonction obtient son propre ensemble de variables locales. Par conséquent, les fonctions ne remplacent pas accidentellement les données des autres.

Variables globales

Une variable créée en dehors de n’importe quelle fonction est une variable globale. Les fonctions peuvent lire des variables globales, mais par défaut, elles ne peuvent pas les modifier .

message = "Hello"

def greet():
    print(message)   # Reading a global variable is fine

greet()              # Output: Hello

Si vous essayez d’affecter une nouvelle valeur à une variable qui existe également globalement, Python la traite comme une nouvelle variable locale , la valeur du global est laissée seule.

color = "blue"

def change_color():
    color = "red"   # This creates a new local variable, not the global one

change_color()
print(color)        # Output: blue

Mot global clé (utiliser avec parcimonie)

Si vous avez vraiment besoin de modifier une variable globale à partir d’une fonction, vous pouvez la déclarer avec le global mot clé :

count = 0

def increment():
    global count
    count = count + 1

increment()
print(count)   # Output: 1

Toutefois, la modification des globals à partir de fonctions internes rend le code plus difficile à suivre et plus difficile à tester. Un meilleur modèle consiste à passer la valeur en tant que paramètre et à retourner la valeur mise à jour :

def increment(count):
    return count + 1

count = 0
count = increment(count)
print(count)   # Output: 1

Pourquoi l’étendue est importante

  • Les variables locales conservent les fonctions indépendantes : une variable d’une fonction ne peut pas gâcher une autre.
  • La lecture des globals est correcte pour les constantes telles que les valeurs de configuration.
  • L’écriture dans des globals à partir de fonctions internes est une source courante de bogues difficiles à trouver. Préférer les paramètres et les valeurs de retour.