Bases de la portée des variables
Comprendre la portée des variables en Python
En Python, la portée des variables (variable scope) détermine l'accessibilité et la durée de vie d'une variable dans différentes parties d'un programme. Comprendre la portée des variables est crucial pour éviter les erreurs liées aux variables non définies et écrire un code propre et efficace.
Types de portée des variables
Python dispose principalement de trois types de portée de variables :
1. Portée locale
Les variables définies à l'intérieur d'une fonction ont une portée locale et ne sont accessibles que dans cette fonction.
def example_function():
local_var = 10 ## Local variable
print(local_var) ## Accessible here
example_function()
## print(local_var) ## This would raise an NameError
2. Portée globale
Les variables définies en dehors de toute fonction ont une portée globale et peuvent être accessibles dans tout le script.
global_var = 20 ## Global variable
def access_global():
print(global_var) ## Accessible inside the function
access_global()
print(global_var) ## Accessible outside the function
3. Portée non locale
Utilisée dans les fonctions imbriquées pour faire référence aux variables de la portée de la fonction externe (enveloppante).
def outer_function():
x = 10
def inner_function():
nonlocal x
x = 20 ## Modifies the outer function's x
inner_function()
print(x) ## Prints 20
outer_function()
Ordre de résolution de la portée (règle LEGB)
Python suit la règle LEGB pour la recherche de variables :
graph TD
A[Local Scope] --> B[Enclosing Scope]
B --> C[Global Scope]
C --> D[Built-in Scope]
Niveau de portée |
Description |
Locale (L) |
À l'intérieur de la fonction actuelle |
Enveloppante (E) |
À l'intérieur des fonctions enveloppantes |
Globale (G) |
Au niveau supérieur du module |
Prédéfinie (B) |
Espace de noms prédéfini de Python |
Bonnes pratiques
- Utilisez des variables locales lorsque cela est possible
- Limitez l'utilisation des variables globales
- Utilisez avec précaution les mots-clés
global
et nonlocal
- Soyez explicite quant à la portée des variables
Pièges courants
x = 10 ## Global variable
def modify_x():
x += 1 ## This will raise an UnboundLocalError
## Python treats x as a local variable due to assignment
def correct_modify_x():
global x
x += 1 ## Now this works correctly
Chez LabEx, nous recommandons de comprendre ces principes de portée pour écrire un code Python plus robuste et prévisible.