343 votes

Affichage de toutes les variables définies par l'

Je suis actuellement en train de travailler sur un calcul en python shell. Ce que je veux avoir, c'est de Matlab style listout où vous pouvez voir toutes les variables qui ont été définies jusqu'à un certain point (donc je connais les noms que j'ai utilisé, leurs valeurs et ces).

Est-il possible, et comment puis-je le faire?

424voto

RedBlueThing Points 21332

Couple de choses que vous pourriez utiliser:

  • dir() vous donnera la liste de portée des variables:
  • globals() vous donnera un dictionnaire des variables globales
  • locals() vous donnera un dictionnaire des variables locales

279voto

Chris Lawlor Points 10033

Si c'est une option pour vous, vous voudrez peut-être regarder à IPython:

Pour obtenir une liste de toutes les variables définies, de type who:

In [1]: foo = 'bar'

In [2]: who
foo

Vous pouvez taper whos pour plus de détails:

In [3]: whos
Variable   Type    Data/Info
----------------------------
foo        str     bar

Il existe une multitude d'autres fonctions disponibles fondamentalement, c'est l'interpréteur de Python sur les stéroïdes. Une commode est - store de commande, qui permet d'enregistrer des variables entre les sessions (comme une sorte de super faciles pickle)

Si vous avez quelques minutes, découvrez Jeff de Rush est un excellent IPython démonstration des screencasts:

Je ne suis en aucune façon associé à l'équipe derrière IPython, juste un utilisateur satisfait.

53voto

Brian R. Bondy Points 141769

Pour obtenir les noms:

for name in vars().keys():
  print(name)

Pour obtenir les valeurs:

for value in vars().values():
  print(value)

vars() prend un argument optionnel pour savoir qui vars sont définies au sein de l'objet lui-même.

52voto

Linguist Points 21

Comme RedBlueThing analogique et dit:

  • dir() vous donnera la liste de portée des variables:
  • globals() vous donnera un dictionnaire des variables globales
  • locals() vous donnera un dictionnaire des variables locales

En utilisant le shell interactif (version 2.6.9) en cours d'exécution dir() après la création de veriables a = 1 et b = 2 - je obtenir

['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b']

l'exécution de la population locale() donne

{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}

l'exécution globals() donne

{'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None}

Ces liste de tous les mêmes variables dans ce cas. Je n'ai pas eu dans tous les modules, de sorte que toutes les variables sont disponibles à la fois comme des variables locales et globales. les habitants() et globals() liste les valeurs des variables ainsi que les noms; dir() n'affiche que les noms.

Si je l'importation d'un module et d'exécuter des locals() ou globals() à l'intérieur du module, dir() donne encore qu'un petit nombre de variables; il ajoute __file__ pour les variables énumérées ci-dessus. les habitants() et globals() dans la liste des mêmes variables, mais dans le processus de l'impression du dictionnaire de la valeur pour __builtin__ il répertorie un nombre bien plus grand de variables: fonctions intégrées, les exceptions et les types, tels que les "'type': <type 'type'>", plutôt que juste une brève <module '__builtin__' (built-in)> comme indiqué ci-dessus.

Pour en savoir plus sur dir() voirPython 2.7 référence rapide au Nouveau-Mexique Tech ou de la fonction dir() à ibiblio.org.

Pour plus de détails sur la population locale() et globals() voir les sections locales et variables globales à la Plongée En Python et une page sur globals à New Mexico Tech.

[Commentaire: @Kurt: Vous avez donné un lien pour énumérer-ou-liste-tous-les variables-dans-un-programme-de-votre-favori-langue- mais cette réponse a une erreur. Le problème, c'est: type(name) dans cet exemple renvoie toujours <type 'str'>. Vous obtenez une liste de variables, qui répond à la question, mais avec les mauvais types énumérés à côté d'eux. Ce n'était pas évident dans votre exemple, car toutes les variables qui est arrivé à être des chaînes de caractères de toute façon; cependant, il est de retour est le type le nom de la place de la variable du type de la variable. Pour résoudre ce problème: au lieu de print type(name) utilisation print eval('type(' + name + ')'). Je m'excuse de poster un commentaire dans la section réponse mais je n'ai pas de commentaire privilèges d'affichage, et l'autre question est fermée.]

14voto

Kurt Points 2018

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X