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?

17voto

Devin Jeanpierre Punkte 87113

globals() , locals() , vars() y dir() mögen Ihnen bei Ihrem Vorhaben helfen.

16voto

jamk Punkte 816

Eine etwas intelligentere (Python 3) Methode:

def printvars():

   tmp = globals().copy()
   [print(k,'  :  ',v,' type:' , type(v)) for k,v in tmp.items() if not k.startswith('_') and k!='tmp' and k!='In' and k!='Out' and not hasattr(v, '__call__')]

Oder wenn Sie die Variablen eines Objekts ausgeben möchten:

def printObj(Obj, OutputMax=100):

   tmp = Obj.__dict__
   [print(k,'  :  ',str(v)[:OutputMax],' type:' , type(v)) for k,v in tmp.items() if not k.startswith('_') and k!='tmp' and k!='In' and k!='Out' and not hasattr(v, '__call__')]

13voto

John T Punkte 23177

Beachten Sie, dass dir() alle aktuellen Importe zurückgibt, UND Variablen.

wenn Sie nur Ihre Variablen haben wollen, würde ich ein Namensschema vorschlagen, das leicht aus dir zu extrahieren ist, wie varScore, varNames, etc.

Auf diese Weise können Sie dies einfach tun:

for vars in dir():
 if vars.startswith("var"):
   print vars

Editer

wenn Sie alle Variablen auflisten wollen, aber importierte Module und Variablen wie ausschließen wollen:

__builtins__

können Sie etwa so verwenden:

import os
import re

x = 11
imports = "os","re"

for vars in dir():
    if vars.startswith("__") == 0 and vars not in imports:
        print vars

Wie Sie sehen können, wird die Variable "imports" angezeigt, da es sich um eine Variable (oder ein Tupel) handelt. Eine schnelle Abhilfe besteht darin, das Wort "imports" in das Tupel "imports" selbst einzufügen!

10voto

Jamie Punkte 111

Dies muss in der interaktiven Shell definiert werden:

def MyWho():
    print [v for v in globals().keys() if not v.startswith('_')]

Dann kann der folgende Code als Beispiel verwendet werden:

>>> import os
>>> import sys
>>> a = 10 
>>> MyWho()
['a', 'MyWho', 'sys', 'os']

5voto

Babak Punkte 404

In meinem Python 2.7-Interpreter wird die gleiche whos Befehl, den es in MATLAB gibt, gibt es auch in Python. Er zeigt die gleichen Details wie das MATLAB-Analog (Variablenname, Typ und Wert/Daten).

Beachten Sie, dass im Python-Interpreter, whos listet alle Variablen im "interaktiven Namensraum" auf.

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