Найти в Дзене
SCIENCE IT

Un régions une action et un nominalementétendues in Python

https://as1.ftcdn.net/jpg/02/25/62/48/500_F_225624883_10zYPWIFg8fHlTutO60wGfavB0mr4Ghv.jpg
https://as1.ftcdn.net/jpg/02/25/62/48/500_F_225624883_10zYPWIFg8fHlTutO60wGfavB0mr4Ghv.jpg

La chose la plus importante à savoir sur les espaces de noms est qu'il n'y a absolument aucune relation entre les espaces de noms dans les différents espaces de noms. Par exemple, deux modules différents peuvent définir une fonction appelée maximiser sans confusion, car les utilisateurs du module doivent précéder son nom.

  1. D'ailleurs : j'utilise le mot attribut pour chaque nom après un point - par exemple, dans l'expression z.real un attribut de l'objet z est réel. Strictement parlant, les références aux noms dans les formulaires sont aussi des références à des attributs : Dans l'expression nommod.funcname, nommod est un objet module et nommod est un attribut de celui-ci. Dans ce cas, il y a une attribution simple des attributs modulaires et des noms globaux définis dans le module : ils ont le même espace de noms !
  2. Les attributs peuvent être en lecture seule ou modifiables. Dans ce dernier cas, une affectation à cet attribut est possible. Les attributs des modules sont modifiables : vous pouvez écrire modname.the_answer = 42. Les attributs modifiables peuvent être supprimés de l'instruction de module en même temps. Par exemple, dans modname.the_answer il supprime l'attribut the_answer de l'objet appelé modname.

Les espaces de noms sont créés à des moments différents et ont des durées de vie différentes. L'espace de nommage contenant les noms incorporés est créé au démarrage de l'agent utilisateur et n'est jamais supprimé. L'espace de nommage global d'un module est créé lorsque vous lisez la définition du module ; normalement, l'espace de nommage du module existe jusqu'à ce que l'agent utilisateur soit terminé. Les instructions de premier niveau appelées par l'agent utilisateur, qu'elles proviennent d'un script ou qu'elles soient lues de manière interactive, sont traitées comme faisant partie du module __main__ de sorte que vous avez votre propre espace de noms global. (Les noms intégrés existent aussi dans un module appelé builtins.)

  • L'espace nom local d'une fonction est créé lorsqu'elle est appelée et est supprimé si la fonction se termine ou génère une exception qui n'est pas traitée dans la fonction.

Une portée est une région d'un programme Python où un espace de noms est directement disponible, c'est-à-dire qu'il est possible pour un nom non qualifié de trouver un nom dans cet espace de noms.

Même si les zones de validité sont déterminées statiquement, elles sont utilisées dynamiquement. A tout moment au cours de l'exécution, il existe au moins trois zones de validité imbriquées dont les espaces de noms sont directement disponibles :

  • La zone de validité la plus interne, qui est recherchée en premier et contient les noms locaux ;

La zone de validité avec tous les espaces de noms environnants (elle contient également les noms globaux du module courant) qui est recherchée à partir de l'espace de noms environnant suivant et contient un espace de noms non local, mais aussi non global ;

  • L'avant-dernière zone de validité contient les noms globaux du module actuel ;

La dernière zone valide (dernière recherche) est l'espace de noms contenant les noms par défaut.

Si un nom est déclaré global, toutes les références et affectations vont directement dans la zone de validité moyenne qui contient les noms globaux du formulaire. Vous pouvez utiliser l'instruction non locale pour associer des variables qui sont en dehors de la portée la plus profonde. Si ces variables ne sont pas déclarées non locales, elles sont en lecture seule (une tentative d'écriture sur ces variables créerait simplement une nouvelle variable locale dans le cadre le plus interne et laisserait la variable externe portant le même nom inchangée).

  1. Normalement, la portée locale fait référence aux noms locaux de la fonction en cours. En dehors des fonctions, la portée locale se réfère au même espace de nommage que la portée globale : le module d'espace de nommage. Les définitions de classes représentent un autre espace de nommage dans la zone de validité locale.
  2. Il est important de comprendre que les zones de validité sont déterminées par le texte : l'objectif global d'une fonction définie dans un module est l'espace nom du module, indépendamment de l'endroit où la fonction est appelée. D'autre part, la recherche de nom est effectuée dynamiquement au moment de l'exécution - cependant, la définition de la langue se développe en une résolution statique des noms au moment de la compilation, vous n'avez donc pas besoin de compter sur la résolution dynamique des noms ! (En fait, les variables locales sont déjà déterminées statiquement.)

Une particularité de Python est que - si aucune déclaration globale n'est active - les affectations de noms sont toujours traitées dans la zone de validité la plus interne. Les affectations ne copient pas les données, mais lient seulement les noms aux objets. Il en va de même pour les suppressions : La déclaration x supprime uniquement le lien x de l'espace de nommage local de la portée.

https://as2.ftcdn.net/jpg/02/78/43/13/500_F_278431353_frOLtGNCKqZzWugTRxueiPmVr40sfOBA.jpg
https://as2.ftcdn.net/jpg/02/78/43/13/500_F_278431353_frOLtGNCKqZzWugTRxueiPmVr40sfOBA.jpg