Maison >développement back-end >Tutoriel Python >Quelles sont les différences entre `globals()`, `locals()` et `vars()` en Python ?

Quelles sont les différences entre `globals()`, `locals()` et `vars()` en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-16 19:43:03648parcourir

What are the differences between `globals()`, `locals()`, and `vars()` in Python?

Comprendre les différences entre globals(), locals() et vars()

Introduction :

En Python , l'exploration de l'espace de noms actuel et la manipulation des variables globales et locales sont souvent nécessaires pour le débogage et la compréhension du comportement du code. Trois fonctions clés : globals(), locals() et vars() permettent d'accéder à ces espaces de noms, chacun avec des caractéristiques et des fonctionnalités uniques.

Distinguer globals(), locals() et vars ():

globals():

  • Toujours renvoie le dictionnaire représentant l'espace de noms du module actuel.
  • Fournit un accès aux variables définies globalement et aux fonctions importées à partir des modules importés.

locals():

  • Renvoie normalement un dictionnaire de l'espace de noms actuel dans une fonction.
  • Capture les valeurs des variables locales à au moment de l'invocation.
  • Mette à jour son dictionnaire uniquement lorsqu'il est explicitement appelé ou lors de l'accès à f_locals, un attribut de cadre de pile.

vars():

  • Si aucun argument n'est fourni, se comporte comme locals(), renvoyant le dictionnaire représentant le courant espace de noms.
  • Lorsqu'un objet est passé en argument, renvoie le dict de cet objet, qui stocke les données d'attribut telles que les variables de classe et les globales de module.

Implications des mises à jour :

Les mises à jour apportées aux dictionnaires renvoyés par globals() ou locals() ne s'effectuent pas automatiquement refléter dans l’espace de noms correspondant. À l’inverse, les modifications apportées à l’espace de noms ne sont pas automatiquement reflétées dans le dictionnaire. Cependant, les mises à jour effectuées via vars() modifient directement le dict de l'objet, affectant ses attributs.

Caractéristiques supplémentaires des locaux() :

  • Lorsqu'il est appelé en dehors d'une fonction, locals() renvoie le dictionnaire d'espace de noms réel, qui est mis à jour dynamiquement pour refléter les changements dans le espace de noms.
  • Dans CPython (implémentation par défaut de Python), locals() peut ne pas mettre automatiquement à jour les variables locales après les affectations à moins qu'une ligne exec "pass" ne soit incluse dans la fonction.

Conclusion :

Comprendre les différences subtiles entre globals(), locals() et vars() est crucial pour efficacement interagir avec les espaces de noms Python. Chaque fonction fournit une vue distincte des étendues actuelles et globales, permettant aux développeurs de dépanner et d'analyser le comportement du code avec une plus grande précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn