410 Stimmen

Anzeige aller definierten Variablen

Ich arbeite derzeit an einer Berechnung in Python Shell. Ich möchte ein Listout im Stil von Matlab haben, in dem alle Variablen angezeigt werden, die bis zu einem bestimmten Punkt definiert wurden (damit ich weiß, welche Namen ich verwendet habe, ihre Werte und so weiter).

Gibt es eine Möglichkeit, und wie kann ich das tun?

498voto

RedBlueThing Punkte 40761

Ein paar Dinge, die Sie verwenden können:

  • dir() gibt Ihnen die Liste der Variablen im Geltungsbereich:
  • globals() gibt Ihnen ein Wörterbuch der globalen Variablen
  • locals() gibt Ihnen ein Wörterbuch der lokalen Variablen

314voto

Chris Lawlor Punkte 43983

Wenn möglich, sollten Sie Folgendes verwenden IPython .

Um eine Liste aller aktuellen benutzerdefinierten Variablen zu erhalten, bietet IPython eine magischer Befehl namens who (Magie muss mit dem Präfix % Zeichen, es sei denn, die automagic Funktion aktiviert ist):

In [1]: foo = 'bar'
In [2]: %who
foo

Sie können die whos Magie, um mehr Details zu erhalten:

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

Es gibt eine Fülle von anderen Zaubern. IPython ist im Grunde der Python-Interpreter auf Steroiden. Eine praktische Magie ist store mit dem Sie Variablen zwischen Sitzungen speichern können (mit pickle ).

Hinweis: Ich bin nicht mit IPython Dev verbunden - nur ein zufriedener Benutzer.

Edita:

Alle magischen Befehle finden Sie in der Datei IPython-Dokumentation .

Dieser Artikel hat auch einen hilfreichen Abschnitt über die Verwendung von magischen Befehlen in Jupyter Notebook

60voto

Brian R. Bondy Punkte 325712

Um die Namen zu erhalten:

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

Um die Werte zu erhalten:

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

vars() nimmt auch ein optionales Argument an, um herauszufinden, welche Variablen in einem Objekt selbst definiert sind.

55voto

Linguist Punkte 829

Wie RedBlueThing und analog sagten:

  • dir() gibt eine Liste der Variablen im Geltungsbereich
  • globals() gibt ein Wörterbuch der globalen Variablen
  • locals() gibt ein Wörterbuch der lokalen Variablen

Mit der interaktiven Shell (Version 2.6.9) können Sie nach der Erstellung von Variablen a = 1 y b = 2 Laufen dir() da

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

läuft locals() da

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

Laufen globals() ergibt genau die gleiche Antwort wie locals() in diesem Fall.

Ich habe mich nicht mit Modulen beschäftigt, daher sind alle Variablen sowohl als lokale als auch als globale Variablen verfügbar. locals() y globals() die Werte der Variablen sowie die Namen auflisten; dir() listet nur die Namen auf.

Wenn ich ein Modul importiere und ausführe locals() ou globals() im Inneren des Moduls, dir() gibt immer noch nur eine geringe Anzahl von Variablen; sie fügt hinzu __file__ zu den oben aufgeführten Variablen. locals() y globals() listet ebenfalls dieselben Variablen auf, aber beim Ausdrucken des Wörterbuchwerts für __builtin__ wird eine weitaus größere Anzahl von Variablen aufgeführt: integrierte Funktionen, Ausnahmen und Typen wie " 'type': <type 'type'> ", und nicht nur die kurze <module '__builtin__' (built-in)> wie oben gezeigt.

Für mehr Informationen über dir() siehe Python 2.7 Kurzreferenz an der New Mexico Tech oder die Funktion dir() unter ibiblio.org.

Für mehr Informationen über locals() y globals() siehe Lokale und globale Daten bei Dive Into Python und eine Seite über Globale an der New Mexico Tech.

[Kommentar: @Kurt: Sie haben einen Link zu alle-variablen-in-einem-programm-deiner-lieblings-sprache-aufzählen-oder-auflisten aber diese Antwort enthält einen Fehler. Das Problem dabei ist: type(name) in diesem Beispiel wird immer zurückgegeben <type 'str'> . Sie erhalten eine Liste der Variablen, die die Frage beantwortet, aber mit den falschen Typen daneben. Dies war in Ihrem Beispiel nicht offensichtlich, da alle Variablen ohnehin Strings waren; was jedoch zurückgegeben wird, ist der Typ des Variablennamens und nicht der Typ der Variablen. Um das Problem zu beheben: Anstelle von print type(name) verwenden. print eval('type(' + name + ')') . Ich entschuldige mich dafür, dass ich einen Kommentar in den Antwortteil geschrieben habe, aber ich habe keine Rechte zum Schreiben von Kommentaren, und die andere Frage ist geschlossen].

20voto

Harold Punkte 4919

Print locals()

Editierung von Kommentar fortgesetzt.

Damit es beim Drucken etwas hübscher aussieht:

import sys, pprint
sys.displayhook = pprint.pprint
locals()

Damit sollten Sie einen eher vertikalen Ausdruck erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X