Was ich hier also suche, ist so etwas wie PHPs drucken_r Funktion.
So kann ich meine Skripte debuggen, indem ich den Zustand des betreffenden Objekts sehe.
Was ich hier also suche, ist so etwas wie PHPs drucken_r Funktion.
So kann ich meine Skripte debuggen, indem ich den Zustand des betreffenden Objekts sehe.
Dazu können Sie die Funktion "dir()" verwenden.
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo
t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder
, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'
'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault
ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he
version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_
ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption
', 'winver']
>>>
Eine weitere nützliche Funktion ist die Hilfe.
>>> help(sys)
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
Dynamic objects:
argv -- command line arguments; argv[0] is the script pathname if known
Um den aktuellen Zustand des Objekts zu drucken, könnten Sie:
>>> obj # in an interpreter
ou
print repr(obj) # in a script
ou
print obj
Definieren Sie für Ihre Klassen __str__
o __repr__
Methoden. Von der Python-Dokumentation :
__repr__(self)
Aufgerufen von derrepr()
integrierte Funktion und durch die Zeichenfolge Konvertierungen (umgekehrte Anführungszeichen) zur die "offizielle" String-Darstellung Darstellung eines Objekts zu berechnen. Wenn irgend möglich möglich, sollte dies wie ein gültiger Python-Ausdruck aussehen, den man verwendet werden kann, um ein Objekt mit dem gleichen Wert zu erzeugen (bei entsprechender Umgebung). Falls dies nicht möglich ist, eine Zeichenkette in der Form "<...some useful Beschreibung...>" zurückgegeben werden. Der Rückgabewert muss eine Zeichenkette sein Objekt sein. Wenn eine Klasse definiert repr. () aber nicht__str__()
entonces__repr__()
ist auch verwendet, wenn eine "informelle" Zeichenkette Darstellung von Instanzen dieser Klasse erforderlich ist. Dies wird typischerweise für die Fehlersuche verwendet, daher ist es wichtig dass die Darstellung informationsreich und eindeutig ist.
__str__(self)
Aufgerufen von derstr()
integrierte Funktion und durch die Druckfunktion Anweisung zur Berechnung der "informellen" String-Darstellung eines Objekts zu berechnen. Dies unterscheidet sich von__repr__()
insofern, als nicht unbedingt ein gültiger Python-Ausdruck sein muss Ausdruck sein muss: eine bequemere oder prägnantere Darstellung kann stattdessen. Der Rückgabewert muss ein String-Objekt sein.
Ich empfehle die Verwendung von help(your_object)
.
help(dir)
If called without an argument, return the names in the current scope. Else, return an alphabetized list of names comprising (some of) the attributes of the given object, and of attributes reachable from it. If the object supplies a method named __dir__, it will be used; otherwise the default dir() logic is used and returns: for a module object: the module's attributes. for a class object: its attributes, and recursively the attributes of its bases. for any other object: its attributes, its class's attributes, and recursively the attributes of its class's base classes.
help(vars)
Without arguments, equivalent to locals(). With an argument, equivalent to object.__dict__.
Es könnte sich lohnen, das zu überprüfen.
Gibt es eine Python-Entsprechung zu Perls Data::Dumper?
Meine Empfehlung ist folgende.
https://gist.github.com/1071857
Beachten Sie, dass es in Perl ein Modul namens Data::Dumper gibt, das Objektdaten in Perl-Quellcode zurückübersetzt (NB: es übersetzt NICHT den Code zurück in den Quellcode, und fast immer wollen Sie die Objektmethodenfunktionen nicht in der Ausgabe haben). Dies kann für die Persistenz verwendet werden, aber der übliche Zweck ist die Fehlersuche.
Es gibt eine Reihe von Dingen, die Standard-Python pprint nicht erreicht, insbesondere hält es einfach an, wenn es eine Instanz eines Objekts sieht und gibt Ihnen den internen Hex-Zeiger des Objekts (errr, dieser Zeiger ist übrigens nicht sehr nützlich). Kurz gesagt, in Python dreht sich alles um dieses großartige objektorientierte Paradigma, aber die Werkzeuge, die man von Haus aus bekommt, sind für die Arbeit mit etwas anderem als Objekten konzipiert.
Mit dem Perl Data::Dumper können Sie steuern, wie tief Sie gehen wollen, und auch zirkulär verbundene Strukturen erkennen (das ist wirklich wichtig). Dieser Prozess ist in Perl grundsätzlich einfacher zu erreichen, weil Objekte keine besondere Magie haben, die über ihren Segen hinausgeht (ein universell gut definierter Prozess).
In den meisten Fällen ist die Verwendung von __dict__
o dir()
werden Sie die gewünschten Informationen erhalten. Sollten Sie mehr Details benötigen, enthält die Standardbibliothek die prüfen Modul, mit dem Sie eine beeindruckende Menge an Details erzielen können. Einige der echten Nuggets von Informationen umfassen:
Wenn Sie nur nach "Welche Attributwerte hat mein Objekt?" suchen, dann dir()
y __dict__
sind wahrscheinlich ausreichend. Wenn Sie wirklich in den aktuellen Zustand beliebiger Objekte eindringen wollen (bedenken Sie, dass in Python fast alles ein Objekt ist), dann inspect
ist eine Überlegung wert.
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.