Remarques sur les espaces de noms emboîtés

Chaque fonction crée son propre espace de noms. Il est possible (et courant) d’emboîter des définitions de fonctions, donc des espaces de noms. Depuis le plus récent d’entre eux, on peut lire les variables définies dans les espaces de noms qui le contiennent. À l’intérieur d’un même espace de noms, les variables deviennent visibles dans l’ordre chronologique de leurs définitions.

Par exemple, on définit ici la variable globale a = 1515.

Ensuite on définit une fonction g à l’intérieur d’une fonction f .

La variable locale a est définie dans f . Sa définition suit celle de g mais (et c’est le plus important) elle précède l’appel à g.

Dans ces conditions (et on le constate lors d’un appel à f ), la fonction g “voit” la variable locale a (qui lui masque d’ailleurs la variable globale a = 1515).

Autre exemple : on définit la variable globale a = 1515.

On définit ensuite la fonction g à l’intérieur de la fonction f .

La fonction g ne redéfinit plus ici de variable locale a. Quand on appelle f (qui appelle elle-même g), on constate que g a accès en lecture à la variable globale a = 1515.

Dans l’exemple suivant, on tente de créer la variable locale a = 2013 dans la fonction f , mais après l’appel à g.

Or la fonction g fait référence à la variable a. Il y a dans ce cas une ambiguïté entre les deux définitions de a.

On voit que Python réagit par un message d’erreur approprié (qu’on a ici abrégé).

Voici une autre situation qui conduit à un message d’erreur (différent du précédent). La fonction f tente d’ajouter 1 au contenu de la variable a. Mais l’écriture a = a+1 provoque l’évaluation dans f et tente de créer une variable locale a.

Le problème est que le second membre a + 1 est évalué d’abord, ce que Python rejette car l’ambiguité est trop grande entre les deux significations de la variable a.

Si on souhaite utiliser (non seulement pour la lire mais pour la modifier), depuis l’intérieur d’une fonction, une variable globale, il faut le préciser (au début de la fonction) par la directive global :

Retour à l’accueil du cours Python/Numpy

Sommaire du chapitre 4

  1. La valeur None, et l’instruction return
  2. L’espace de noms global
  3. L’espace de noms local d’une fonction
  4. Remarques sur les espaces de noms emboîtés
  5. Paramètres positionnels ou nommés, valeurs par défaut
  6. Rattrapage des exceptions
  7. Fonctions lambda
  8. Documentation des fonctions