Tutoriel Python - Namescape et Scope

Jinku Hu 30 janvier 2023
  1. Nom en Python
  2. Espace de nommage en Python
  3. Portée des variables en Python
  4. Utilisation de la portée et de l’espace de noms en Python
Tutoriel Python - Namescape et Scope

Dans cette section, vous apprendrez l’espace de noms et la portée d’une variable dans la programmation Python.

Nom en Python

Un nom en Python est un identifiant donné à l’objet. Python est un langage de programmation orienté objet, ce qui signifie que tout est un objet en Python et que les noms sont utilisés pour accéder aux objets.

Par exemple, lorsque vous attribuez une valeur à une variable x = 3. Ici, 3 est un objet et est stocké dans un emplacement mémoire (RAM). Cet emplacement mémoire est un emplacement mémoire nommé qui peut être accédé par le nom x. L’adresse de cet objet (3) peut être obtenue en utilisant la fonction intégrée id().

x = 3
print("id(3) =", id(3))
print("id(x) =", id(x))
id(3) = 1864160336
id(x) = 1864160336

Ici, l’objet 3 est stocké dans un emplacement dont le nom est x et donc l’adresse des deux est la même.

Quand vous assignez la valeur de x à une autre variable, disons y et changez la valeur de x, alors x aura un nouvel emplacement et y aura l’emplacement de x précédent. Ceci est démontré ci-dessous:

x = 3
print("id(x) =", id(x))
x = 4
print("id(4) =", id(4))
print("id(x) =", id(x))
y = 3
print("id(y) =", id(y))
id(x) = 1864160336
id(4) = 1864160352
id(x) = 1864160352
id(y) = 1864160336

Vous pouvez voir ici que l’adresse de y est égale à celle de l’ancien x.

Espace de nommage en Python

Un espace de noms est une collection de noms. Un espace de noms est un mappage de nom à un objet et est implémenté comme un dictionnaire en Python. Les espaces de noms assurent que chaque nom utilisé dans un programme est unique.

Les espaces de noms sont créés au démarrage de l’interpréteur, et supprimés à la fin de l’exécution du programme. Cet espace de noms contient tous les noms intégrés, donc chaque fois que vous avez besoin d’une fonction intégrée, par exemple id(), vous pouvez l’utiliser directement dans votre programme.

Quand vous appelez une fonction, un espace de noms local contenant tous les noms définis est créé.

Portée des variables en Python

Lorsque vous créez une variable dans votre programme, il se peut que vous n’ayez pas accès à cette variable depuis toutes les parties du programme. Ceci est dû à l’étendue des variables. Vous essayez d’accéder aux variables à partir de l’espace de noms où elles ne sont pas définies.

Une portée peut être définie comme un endroit d’où vous pouvez accéder à votre espace de noms sans aucun préfixe.

La portée peut être catégorisée comme:

  1. Portée d’une fonction où vous avez des noms locaux.
  2. Portée d’un module où vous avez des variables globales.
  3. Portée d’un module où vous avez des noms intégrés.

Lorsque vous créez une référence à l’intérieur d’une fonction, elle est d’abord recherchée dans l’espace de noms local, puis dans l’espace de noms global ; si elle n’est trouvée nulle part, elle sera recherchée dans l’espace de noms intégré.

Lorsque vous créez une fonction imbriquée, vous aurez une nouvelle portée à l’intérieur de la portée locale.

Utilisation de la portée et de l’espace de noms en Python

def outer():
    x = 12

    def inner():
        y = 13


z = 14

Ici, une fonction imbriquée est définie (fonction à l’intérieur d’une autre fonction). La variable y est dans l’espace de noms local de la fonction interne, la variable x est dans l’espace de noms local de la fonction externe et la variable z est dans l’espace de noms global.

Quand elle est à l’intérieur de la fonction interne, la variable y est une variable locale, x est non-locale et z est globale. La fonction interne n’a pas accès aux variables non-locales x et globales z.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook