Bonjour

J'ai une petite interrogation sur la portée d'une variable. Tantôt je la vois, tantôt je ne la vois plus.

Petit exemple

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
def fct():
	print(toto)
 
toto=10
fct()
print(toto)
Jusqu'ici tout fonctionne comme indiqué sur le tuto de ce forum. Ma variable toto est globale et non modifiable mais visible dans la fonction donc ma fonction la voit et peut l'afficher.

Rajoutons maintenant 1 ligne
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
def fct():
	toto=5
	print(toto)
 
toto=10
fct()
print(toto)
Je redéfinis une variable locale dont la visibilité surclasse la globale. Dans la fonction elle vaut 5 mais la globale inchangée reste à 10. Ca va encore.

Rajoutons maintenant une dernière ligne
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
def fct():
	print(toto)
	toto=5
	print(toto)
 
toto=10
fct()
print(toto)
Et là, rien ne va plus. Python me dit qu'il ne connait pas la variable "toto" et lève une exception au premier print. Pourtant à cet endroit il devrait voir la globale qui n'a pas encore été supplantée par la locale !!! (à ce moment là, il n'y a encore aucune différence avec le premier code)...
On dirait que puisque "toto" a été définie dans la fonction, elle n'a alors plus le droit d'être invoquée avant sa définition et ce, même si une globale existe à son nom. Et cela impliquerait alors que Python fait au-moins 2 évaluations d'un code lors de son exécution...

Merci à ceux qui pourront m'éclairer de leurs avis à ce sujet...