Énumérer ou de la liste de toutes les variables dans un programme de [votre langue préférée ici]

Un ami m'a demandé la semaine dernière comment énumérer ou de la liste de toutes les variables à l'intérieur d'un programme/fonction/etc. pour les fins de débogage (essentiellement obtenir un aperçu de tout ce que vous pouvez voir quelles sont les variables définie, ou si elles sont définies à tous). J'ai regardé un peu autour et a trouvé un relativement bon moyen pour Python:

#!/usr/bin/python 
toto1 = "Bonjour le monde" 
foo2 = "barre" 
foo3 = {"1":"un", 
"2":"b"} 
foo4 = "1+1" 

pour le nom de dir(): 
mavaleur = eval(nom) 
nom en caractères d'imprimerie, "est", type(nom), "et est égal à ", mavaleur 

qui va afficher quelque chose comme:

__les builtins__ <type 'str'>, et est égal à <module " __builtin__' (built-in)> 
__doc__ <type 'str'>, et est égal à Aucun 
__fichier__ <type 'str'>, et est égal à ./foo.py 
___ nom_ <type 'str'>, et est égal à __principaux__ 
toto1 est <type 'str'>, et est égal Bonjour tout le monde 
foo2 est <type 'str'>, et est égal à la barre 
foo3 est <type 'str'>, et est égal à {'1': 'a', '2': 'b'} 
foo4 est <type 'str'>, et est égal à 1+1 

J'ai trouvé jusqu'à présent une partie en PHP (avec l'aimable autorisation de texte du lien), mais il ne répertorie toutes les variables et leurs types, pas le contenu:

<?php 
//créer un peu de variables 
$bar = 'foo'; 
$foo = "bar"; 
//création d'un nouvel objet array 
$arrayObj = new ArrayObject(get_defined_vars()); 
//boucle sur le tableau de l'objet et de l'écho des variables et des valeurs 
for($iterator = $arrayObj->getIterator(); $iterator->valide(); $iterator->next()) 
{ 
echo $iterator->key() . '=> ' . $iterator->current() . '<br />'; 
} 
?> 

Donc je l'ai mis pour vous: comment avez-vous la liste de toutes les variables et leur contenu dans votre langue préférée?


Édition par VonC: je vous propose cette question suit l'esprit d'un petit "code-défi".

Si vous n'êtes pas d'accord, il suffit d'éditer et de supprimer le tag et le lien.

  • En python, je venais de l'utilisation de variables locales/globales plutôt que de le dir/eval vous montrer ci-dessus. Voir ci-dessous.
  • En PHP il peut également être fait beaucoup plus facile, voir ma réponse.
  • C'est un hack de une question, car il n'est pas question sur une question spécifique, il est dit "allons voir ce que vous pouvez faire dans votre langue?". C'est une question de discussion, car il n'y a pas une seule bonne réponse. Par conséquent, il devrait probablement être supprimé, mais au moins marqué wiki de la communauté. C'est plus un post sur le forum.
  • Je suis en désaccord, mon plan est de choisir la solution la plus élégante dans l'ensemble et de le définir comme la réponse et presto. Je suppose que si j'avais demandé à l'un de ces pour chaque question qui serait considérée plus comme une "bonne" cause, mais il est intéressant de noter que les méthodes utilisées dans les différentes langues se chevauchent souvent avec d'autres langues (c'est à dire utiliser le débogueur/etc.).
  • Je pensais exactement la même chose. Les réponses sont en effet utiles, mais la question n'est pas SOI-qualifiés. Je suis d'accord qu'il devrait aller CW.
  • great post. J'avais besoin de cela pour obtenir une liste de variables que j'ai défini dans un module. avec un test de " pas de nom.startswith('__')'(à l'aide de python) cela fait des miracles pour moi. Merci beaucoup
  • Soupir. Ne devrait pas être à la fois 1) fermée pour être trop large parce qu'il est en plusieurs langues, et 2) la "double redirection" pour des questions d'une langue unique.
  • Je serai d'accord, l'utilisation de ce comme un dupe de la cible spécifique des questions du langage est fondamentalement dire "à chaque question unique sur la façon d'obtenir une liste de variables doit être fermé".

InformationsquelleAutor Kurt | 2009-01-10