La portée des variables en Python
1. Qu’est-ce que la portée d’une variable ?
La portée (ou scope en anglais) d’une variable désigne l’endroit du programme où cette variable est accessible.
Il existe deux grands types de portée en Python :
- La portée locale
- La portée globale
2. La portée locale
Une variable est dite locale lorsqu’elle est déclarée à l’intérieur d’une fonction. Elle n’est accessible que dans cette fonction.
Exemple :
def saluer():
message = "Bonjour !"
print(message)
saluer()
print(message) # Erreur : la variable message n'existe pas ici
➡️ Ici, message
est locale à la fonction saluer()
. Elle n'existe pas en dehors de cette fonction.
3. La portée globale
Une variable est globale lorsqu’elle est déclarée en dehors de toute fonction. Elle est alors accessible dans tout le programme, y compris dans les fonctions (en lecture uniquement).
Exemple :
nom = "Alice" # variable globale
def afficher_nom():
print(nom) # OK : on lit une variable globale
afficher_nom()
✅ Ici, nom
est accessible dans la fonction car on ne la modifie pas.
4. Modifier une variable globale dans une fonction
Si l’on veut modifier une variable globale depuis une fonction, il faut utiliser le mot-clé global
.
Exemple :
compteur = 0
def incrementer():
global compteur
compteur += 1
incrementer()
print(compteur) # Affiche : 1
⚠️ Sans le mot-clé global
, Python crée une nouvelle variable locale au lieu de modifier la variable globale.
5. Variables locales avec le même nom qu’une variable globale
Quand une variable locale a le même nom qu’une variable globale, la variable locale masque la variable globale dans la fonction.
Exemple :
x = 10
def test():
x = 5 # variable locale
print("Dans la fonction :", x)
test()
print("En dehors de la fonction :", x)
➡️ Affiche :
Dans la fonction : 5
En dehors de la fonction : 10
6. Les fonctions imbriquées (bonus)
Quand une fonction est définie à l’intérieur d’une autre, on peut utiliser le mot-clé nonlocal
pour modifier une variable dans la fonction parente (mais pas globale).
def exterieure():
x = 1
def interieure():
nonlocal x
x = 2
interieure()
print(x) # Affiche : 2
🧠 À retenir
Type de variable | Où est-elle déclarée ? | Où est-elle accessible ? |
---|---|---|
Locale | Dans une fonction | Uniquement dans cette fonction |
Globale | En dehors de toute fonction | Partout, sauf si masquée |
global |
Dans une fonction | Modifie une variable globale |
nonlocal |
Dans une fonction imbriquée | Modifie une variable dans la fonction parente |
📝 Exercices
Exercice 1 – Variables locales
def bonjour():
prenom = "Julie"
print("Bonjour", prenom)
bonjour()
print(prenom) # Que va-t-il se passer ici ?
- ➤ Prédisez l’erreur affichée.
- ➤ Expliquez pourquoi.
Exercice 2 – Portée globale et lecture
message = "Bienvenue"
def affiche():
print(message)
affiche()
- ➤ Que s’affiche-t-il ?
- ➤ La variable
message
est-elle globale ou locale ?
Exercice 3 – Portée globale et écriture
valeur = 100
def change():
valeur = 50
change()
print(valeur)
- ➤ Que s’affiche-t-il ?
- ➤ Pourquoi la variable
valeur
n’a-t-elle pas changé ?
Exercice 4 – Correction avec global
Reprenez l’exercice 3 et modifiez-le pour que l’appel à change()
modifie bien la variable globale.
Exercice 5 – Application concrète
Complétez le programme suivant pour que la fonction ajouter()
ajoute 1 au compteur global à chaque appel :
compteur = 0
def ajouter():
# Complétez ici
ajouter()
ajouter()
print(compteur) # Doit afficher : 2