Rappel
le « scope » : qui voit quoi ?
Une fonction a-t-elle accès aux variables qui sont en dehors d'elle ? Et ce qu'elle crée en dedans, est-ce que ça survit ?
La fonction lit taux sans l'avoir reçu en paramètre. Python va le chercher à l'extérieur. Comprendre quand c'est permis, c'est comprendre la portée.
Règle 1
Python suit la règle du plus proche au plus large : pas de taux local ? Il va le chercher dans le programme. Possible, mais à utiliser avec prudence : la dépendance reste invisible dans la signature.
Règle 2
Dès qu'on assigne un nom dans la fonction, Python en fait une nouvelle variable locale. Le compteur du dedans n'est pas celui du dehors. On ne modifie pas l'extérieur par accident.
Règle 3
total et le paramètre liste n'existent que pendant l'appel. Après le return, ils disparaissent. C'est sain : la fonction ne laisse pas traîner ses variables temporaires.
La porte de secours
Oui, il existe un moyen de forcer la modification du dehors : le mot-clé global. On l'évite presque toujours. Il rend le code imprévisible (une fonction qui change l'état du programme en cachette).
À connaître, mais à ne pas prendre comme réflexe
Ce qui entre passe par les paramètres. Ce qui sort passe par le return.
Une boîte avec une entrée et une sortie, pas une fenêtre ouverte sur tout le programme.
| La variable | Ce que c'est | À l'intérieur | À l'extérieur |
|---|---|---|---|
| devise | variable externe | ✓ lecture (pas modif) | ✓ existe |
| TAUX_TAXE | constante externe | ✓ lecture | ✓ existe |
| montant | paramètre reçu | ✓ locale | ✗ n'existe pas |
| taxe | variable locale | ✓ pendant l'appel | ✗ disparaît |
Surprise fréquente : dans Colab/Jupyter, toutes les cellules partagent le même espace global. Ce qu'une cellule exécute reste vivant pour les cellules suivantes.
Le piège inverse : si tu effaces une cellule d'import sans relancer, la variable reste en mémoire... jusqu'au prochain « Redémarrer l'environnement », où tout l'espace global est remis à zéro.
global, qu'on évite)