1. A propos des espaces de noms (Namespace)
L'espace de noms (namespace) est un moyen d'implémenter la portée. En Python, chaque package, module, classe, fonction et méthode ... possède un 'espace de noms' (namespace) dans lequel les noms de variables sont résolus. Lorsqu'une fonction, un module ou un package est évalué (c'est-à-dire démarre son exécution), un espace de noms est créé. Considérez-le comme un 'contexte d’évaluation'. Lorsqu'une fonction, etc., termine son exécution, l'espace de noms est supprimé. Les variables sont supprimées. De plus, un espace de noms global est utilisé si le nom ne figure pas dans l'espace de noms local.
Chaque nom de variable est vérifié dans l'espace de noms local (le corps de la fonction, le module, etc.), puis vérifié dans l'espace de noms global.
Les variables sont généralement créées uniquement dans un espace de noms local. Les instructions globales et non locales peuvent créer des variables dans un espace de noms autre que local.
Le diagramme suivant vous aide à comprendre et à clarifier ce concept:
2. Les différents types de namespace
En Python et en générale dans tout langage de programmation, les namespaces sont classifiés de la manière suivante:
- Built-in namespace (Espace de noms intégré) : Ces espaces de noms contiennent tous les objets intégrés dans Python et sont disponibles chaque fois que Python est en cours d'exécution.
- Global namespace (Espace de noms global) : Ce sont des espaces de noms pour tous les objets créés au niveau du programme principal.
- Espaces de noms englobants (Enclosing namespaces) : Ces espaces de noms se trouvent au niveau supérieur ou à la fonction externe.
- Local namespaces (Espaces de noms locaux) : Ces espaces de noms se trouvent au niveau de la fonction locale ou interne.
3. Exemples d'usage des namespace
Exemple 1 ( Local namespace)
def my_function(): local_var = 11 # ici on peut accéder à la variable locale print("La valeur de la variable locale est : ", local_var) my_function() # Ici à l'extérieur de la fonction on ne peut accéder à la variable locale print("La variable locale à l'exterieur de la fonction: ", local_var) """ output: La valeur de la variable locale est : 11 Traceback (most recent call last): NameError: name 'local_var' is not defined """
Exemple 2 ( global, local & nested local namespace)
# global_var se trouve dans le namespace global global_var = 7 def ma_fonction(): # local_var se trouve dans le namespace local de ma_fonction local_var = 3 # inner function def fonction_interne(): # nested_var se trouve dans le namespace local de fonction_interne nested_var = 5 print(f"nested_var: {nested_var}") # Accès à nested_var print(f"local_var: {local_var}") # Accès à local_var de la fonction englobante print(f"global_var: {global_var}") # Accès à global_var du scope global fonction_interne() print(f"local_var: {local_var}") # Accès à local_var dans ma_fonction print(f"global_var: {global_var}") # Accès à global_var du scope global ma_fonction() print(f"global_var: {global_var}") # Accès à global_var dans le scope global """ output: nested_var: 5 local_var: 3 global_var: 7 local_var: 3 global_var: 7 global_var: 7 """
Younes Derfoufi
CRMEF OUJDA