Namespace En Python

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:
espace de nom en python - namespace

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:

  1. 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.
  2. Global namespace (Espace de noms global) : Ce sont des espaces de noms pour tous les objets créés au niveau du programme principal.
  3. Espaces de noms englobants (Enclosing namespaces) : Ces espaces de noms se trouvent au niveau supérieur ou à la fonction externe.
  4. 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

Leave a Reply