NSI · Première

Variables locales et globales

Découvrir la notion de portée (scope), la distinction entre variables locales et globales, l'instruction global et les effets de bord.

Variables locales et variables globales

Portée locale des variables

Lorsque l'on crée des variables à l'intérieur d'une fonction, celles-ci n'existent pas en dehors de celle-ci. C'est le concept de portée (*scope*).

Activité

Activité 23 : Variable locale inaccessible

Analysez et exécutez le programme suivant :

Python
1
2
3
4
def fct():
i = 5
fct()

Après exécution, déterminez la valeur de i en le saisissant dans la console.

Conflit de noms : local vs global

Une variable globale (créée en dehors de toute fonction) et une variable locale (créée dans une fonction) peuvent porter le même nom sans s'écraser.

Activité

Activité 24 : Noms identiques

Exécutez ce programme :

Python
1
2
3
4
5
6
i = 3
def fct():
i = 5
fct()

Quelle est la valeur de i dans la console à la fin ?

Recherche de variable dans les espaces de nommage

Lorsqu'on utilise une variable dans une fonction, Python cherche son association de nom selon un ordre précis : il cherche d'abord dans l'espace local de la fonction. S'il ne la trouve pas, il va chercher dans l'espace global.

Activité

Activité 25 : Lecture d'une variable globale

Testez le programme suivant :

Python
1
2
3
4
5
6
i = 3
def fct():
print(i)
fct()
Activité

Activité 26 : Priorité locale

Observez et testez ce programme :

Python
1
2
3
4
5
6
7
i = 3
def fct():
i = 5
print(i)
fct()

Ici, Python trouve immédiatement une variable locale i (de valeur 5). La recherche s'arrête là, le programme affiche 5. La variable globale i de valeur 3 reste inchangée.

Le problème de la modification directe

Activité

Activité 27 : Erreur de référence

Tentez d'exécuter ce script :

Python
1
2
3
4
5
6
i = 3
def fct():
i = i + 1
fct()

L'instruction global et les effets de bord

Pour pouvoir modifier une variable globale à l'intérieur d'une fonction, on doit utiliser l'instruction global :

Activité

Activité 28 : Utilisation du mot-clé global

Exécutez ce programme :

Python
1
2
3
4
5
6
7
i = 3
def fct():
global i
i = i + 1
fct()

Vérifiez la valeur de i dans votre console après l'exécution.

Pourquoi l'utilisation de global est déconseillée ?

L'utilisation de global provoque ce que l'on appelle un effet de bord (la fonction modifie directement l'état global du programme).

En programmation professionnelle, les effets de bord sont considérés comme de mauvaises pratiques car :

  • Ils rendent le programme difficile à lire et à comprendre.
  • Ils compliquent le débogage (l'état futur des variables globales est difficile à prévoir).
  • Ils risquent d'entraîner des comportements imprévus ou des bogues de collision de données.

> Remarque : Un paradigme complet de programmation (la programmation fonctionnelle) cherche à bannir au maximum ces effets de bord. Nous l'étudierons en classe de Terminale.

Avez-vous compris ce chapitre ?

Cochez-le pour l'enregistrer dans votre progression d'apprentissage.