Qu'est-ce qu'une variable en Python
Une variable est un nom qui fait référence à un objet en mémoire. En Python, les variables n'ont pas de type fixe. Le type appartient à l'objet auquel la variable fait référence.
x = 42
x = "maintenant une chaîne"
Variables locales en Python
Définition des variables locales
Une variable locale est définie à l'intérieur d'une fonction et n'est accessible que dans cette fonction. Une fois la fonction terminée, la variable locale est supprimée de la mémoire.
def dire_bonjour():
nom = "Python" # variable locale
print("Bonjour,", nom)
dire_bonjour()
# print(nom) # Erreur : nom n'est pas défini
La variable nom n'existe qu'à l'intérieur de la fonction dire_bonjour et est inaccessible en dehors.
Avantages des variables locales
Les variables locales assurent l'isolation des données et empêchent les modifications indésirables depuis d'autres parties du programme. Elles libèrent automatiquement la mémoire après l'exécution de la fonction.
Variables globales en Python
Que sont les variables globales
Une variable globale est déclarée en dehors de toutes les fonctions et est accessible partout dans le fichier. Ces variables conservent leur valeur pendant toute la durée d'exécution du programme.
langage = "Python" # variable globale
def afficher():
print("Langage :", langage)
afficher() # Langage : Python
Problèmes liés à la modification des variables globales
Si vous tentez de modifier une variable globale à l'intérieur d'une fonction, une erreur se produit :
compteur = 0
def incrementer():
compteur += 1 # UnboundLocalError !
Python interprète compteur comme une variable locale à cause de l'opération d'affectation, mais elle n'a pas été définie localement.
Le mot-clé global
Utiliser global pour modifier les variables globales
Le mot-clé global permet de modifier les variables globales à l'intérieur des fonctions :
compte = 0
def incrementer():
global compte
compte += 1
incrementer()
print(compte) # 1
Application de global dans les opérations mathématiques
total = 0
def ajouter(x):
global total
total += x
ajouter(10)
ajouter(20)
print(total) # 30
Quand utiliser global
Le mot-clé global doit être utilisé avec précaution, car il peut compliquer le débogage et rendre le code moins lisible.
Portée des variables : la règle LEGB
Principe de recherche des variables
Python recherche les variables selon la règle LEGB dans l'ordre suivant :
- L (Local) — à l'intérieur de la fonction actuelle
- E (Enclosing) — dans les fonctions englobantes
- G (Global) — au niveau du module
- B (Built-in) — noms intégrés de Python
Exemple d'application de la règle LEGB
x = "global"
def externe():
x = "englobant"
def interne():
x = "local"
print(x)
interne()
externe() # local
Python trouve la variable x dans la portée locale et utilise sa valeur.
Le mot-clé nonlocal
Accès aux variables des fonctions imbriquées
Le mot-clé nonlocal est utilisé pour travailler avec des variables provenant d'une portée externe, mais non globale :
def externe():
compteur = 0
def interne():
nonlocal compteur
compteur += 1
return compteur
return interne
f = externe()
print(f()) # 1
print(f()) # 2
Différences entre global et nonlocal
Le mot-clé global agit sur les variables au niveau du module, tandis que nonlocal agit sur les variables des fonctions externes dans une même portée.