C16.1 : Portée des variables
Variables globales et locales
Présentation
• Une variable définie dans le programme principal est appelée variable globale.
• Une variable définie dans une fonction est appelée variable locale.
Les variables locales sont supprimées à la fin de l'exécution de la fonction.
Les variables globales ne peuvent pas être modifiées depuis une fonction de façon simple.
Attention aux noms des variables
Un problème se pose lorsque le même nom est donné à une variable locale et à une variable globale.
• Lorsque une variable est appelée dans le programme principal : c'est la variable globale qui est utilisée.
• Lorsque une variable est appelée dans une fonction :
- ⇒ le programme regarde d'abord localement si la variable existe :
- ⮕ si c'est le cas : la variable locale est utilisée,
- ⮕ si ce n'est pas le cas ⇒ le programme regarde globalement si la variable existe :
- ⮕ si c'est le cas : la variable globale est utilisée (depuis la fonction),
- ⮕ si ce n'est pas le cas : un erreur est renvoyée.
Remarque : Lorsque dans une fonction, une variable globale a été appelée une fois, il n'est plus possible d'utiliser le nom de la variable globale comme variable locale (l'exécution du programme génère une erreur "local variable 'nom_var' referenced before assignment").
Bonne pratique : Ne pas donner à une variable locale un nom déjà utilisé pour une variable globale.
Attention aux noms des paramètres
Bonne pratique : Ne pas donner aux paramètres les mêmes noms que ceux des variables globales.
Application (sur papier)
🖊️ Pour chacun des exemples suivants, et pour chaque ligne qui contient un print, indiquer :
- - si la variable passée en paramètre du
printest une variable locale ou globale ; - - la valeur qui sera affichée.
Attention : dans certains cas, le programme peut afficher une erreur !
Exemple 1
def fonc():
print(val1)
val1 = 4
fonc()
Exemple 2
def fonc():
val1 = 8
print(val1)
val1 = 4
fonc()
Exemple 3
def fonc():
val1 = 8
val1 = 4
fonc()
print(val1)
Exemple 4
def fonc():
val2 = val1
print(val2)
val1 = 4
fonc()
Exemple 5
def fonc():
val2 = val1
val1 = 4
fonc()
print(val2)
Exemple 6
def fonc():
val1 = 8
val2 = val1
print(val2)
val1 = 4
fonc()
Exemple 7
def fonc():
val2 = val1
val1 = 8
print(val1)
val1 = 4
fonc()
Outils de débogage (prendre connaissance)
Le point d'arrêt avec Thonny
Le point d'arrêt de Thonny (●) permet de lancer l'exécution d'un programme jusqu'à une instruction spécifiquement repérer et de visualiser l'état de toutes les variables juste avant que cette instruction ne soit exécutée. Il est ensuite possible d'avancer dans le programme pas à pas.
Méthode à suivre :
- - double cliquer juste à côté du numéro de la ligne repérer pour insérer le point d'arrêt (qui se matérialise par un point rouge) ;
- - lancer le programme en mode débogage
; - - eventuellement, avancer dans le programme pas à pas
; - - terminer l'exécution du programme
.
Visualisation des variables en cours d'exécution avec Python Tutor
Lien : pythontutor.com/python-debugger.html
Python tutor permet de visualiser l'état de toutes les variables au cours de l'exécution d'un programme.
Il permet d'une part de différencier les variables globales des variables locale.
Il aide également à visualiser la différence de traitement entre les variables de type non mutables et mutables.