Gérer l’étendue des variables
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.