Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 21 Debugging
  Pfeil 21.1 Der Debugger
  Pfeil 21.2 Inspizieren von Instanzen – inspect
    Pfeil 21.2.1 Datentypen, Attribute und Methoden
    Pfeil 21.2.2 Quellcode
    Pfeil 21.2.3 Klassen und Funktionen
  Pfeil 21.3 Formatierte Ausgabe von Instanzen – pprint
  Pfeil 21.4 Logdateien – logging
    Pfeil 21.4.1 Das Meldungsformat anpassen
    Pfeil 21.4.2 Logging Handler
  Pfeil 21.5 Automatisiertes Testen
    Pfeil 21.5.1 Testfälle in Docstrings – doctest
    Pfeil 21.5.2 Unit Tests – unittest
  Pfeil 21.6 Traceback-Objekte – traceback
  Pfeil 21.7 Analyse des Laufzeitverhaltens
    Pfeil 21.7.1 Laufzeitmessung – timeit
    Pfeil 21.7.2 Profiling – cProfile
    Pfeil 21.7.3 Tracing – trace


Galileo Computing - Zum Seitenanfang

21.3 Formatierte Ausgabe von Instanzen – pprint  topZur vorigen Überschrift

Das Modul pprint (für pretty print) gibt eine formatierte Repräsentation eines Python-Datentyps auf dem Bildschirm aus. Damit macht das Modul insbesondere die Ausgabe großer Listen oder Dictionarys besser lesbar und bietet sich somit förmlich an, in einer interaktiven Debug-Sitzung zur Ausgabe verschiedener Werte verwendet zu werden.

Im Modul pprint sind die folgenden Funktionen enthalten. Um die Beispiele ausführen zu können, muss zuvor das Modul pprint eingebunden werden:

>>> import pprint
pprint.pprint(object[, stream[, indent[, width[, depth]]]])

Gibt die Instanz object formatiert auf dem Stream stream aus. Wenn der Parameter stream nicht übergeben wird, wird nach sys.stdout geschrieben. Über die Parameter indent und depth lässt sich die Formatierung der Ausgabe steuern. Dabei kann für indent die Anzahl der Leerzeichen übergeben werden, die für eine Einrückung verwendet werden soll. Der Parameter indent ist mit 1 vorbelegt.

Über den optionalen Parameter width kann die maximale Anzahl an Zeichen angegeben werden, die die Ausgabe breit sein darf. Dieser Parameter ist mit 80 Zeichen vorbelegt.

Der Parameter depth ist ebenfalls eine ganze Zahl und gibt an, bis zu welcher Tiefe Unterinstanzen, beispielsweise also verschachtelte Listen, ausgegeben werden sollen. Im folgenden Beispiel soll die Funktion pprint dazu verwendet werden, die Liste sys.path formatiert und damit lesbar auszugeben:

>>> import sys 
>>> pprint.pprint(sys.path, indent=4) 
[   'C:\\Python25\\Lib\\idlelib', 
    'C:\\WINDOWS\\system32\\python25.zip', 
    'C:\\Python25\\DLLs', 
    'C:\\Python25\\lib', 
    'C:\\Python25\\lib\\plat-win', 
    'C:\\Python25\\lib\\lib-tk', 
    'C:\\Python25', 
    'C:\\Python25\\lib\\site-packages']

Zum Vergleich geben wir sys.path noch einmal unformatiert mittels print aus:

>>> print sys.path 
['C:\\Python25\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python25.zip',
'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win',
'C:\\Python25\\lib\\lib-tk', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages']

Die Ausgabe eines Dictionarys sieht folgendermaßen aus:

>>> d = {} 
>>> d["path"] = sys.path 
>>> d["hallo"] = "welt" 
>>> d["aaa"] = "Sortierte Ausgabe" 
>>> pprint.pprint(d)
{'aaa': 'Sortierte Ausgabe', 'hallo': 'welt', 'path': ['C:\\Python25\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python25.zip', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages']}

Es wurde ein Dictionary angelegt, in dem unter anderem die Liste sys.path als Wert enthalten ist. Damit ist dies nicht nur ein Beispiel für die formatierte Ausgabe eines Dictionarys, sondern zugleich dafür, wie verschachtelte Instanzen formatiert werden. Beachten Sie, dass die Schlüssel/Wert-Paare des Dictionarys bei der Ausgabe nach den Schlüsseln sortiert werden.

pprint.pformat(object[, indent[, width[, depth]]])

Die Funktion pformat hat eine ähnliche Bedeutung wie pprint, mit dem Unterschied aber, dass pformat die formatierte Ausgabe in Form eines Strings zurückgibt, anstatt sie in einen Stream zu schreiben. Die Schnittstelle von pformat ist bis auf den hier überflüssigen stream-Parameter mit der von pprint identisch.

pprint.isreadable(object)

Gibt True zurück, wenn die formatierte Ausgabe der Instanz object lesbar ist. Lesbar bedeutet in diesem Zusammenhang, dass die Ausgabe als Python-Code gelesen werden kann und mithilfe der Built-in Function eval aus der Ausgabe wieder die zugrunde liegende Python-Instanz rekonstruiert werden könnte.

Wenn object eine Instanz eines Basisdatentyps ist, gibt die Funktion in den meisten Fällen True zurück:

>>> pprint.isreadable(sys.path) 
True 
>>> a = [] 
>>> a.append(a) 
>>> pprint.isreadable(a) 
False

Im zweiten Teil des Beispiels wurde False zurückgegeben, weil es sich um eine rekursive Liste handelt, die sich selbst als Element enthält. Eine solche Liste kann aus naheliegenden Gründen nicht vollständig ausgegeben werden. Auch Instanzen selbst erstellter Klassen können nicht lesbar repräsentiert werden. Letzteres liegt daran, dass die Ausgabe dann den Code zum Erstellen der Klasse sowie der Instanz enthalten müsste, was keinen Sinn macht.

pprint.isrecursive(object)

Gibt True zurück, wenn die Instanz object rekursiv ist, also sich selbst als Element enthält.

>>> a = [] 
>>> a.append(a) 
>>> pprint.isrecursive(a) 
True

Damit sind die grundlegendsten Möglichkeiten, die das Modul inspect bietet, erläutert, und wir werden uns im Folgenden mit dem Modul logging beschäftigen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo