Il modulo pprint fornisce la possibilità di stampare ``elegantemente'' strutture arbitrarie di dati Python in una forma che può venire usata come input per l'interprete. Se le strutture formattate contengono oggetti che non sono dei tipi Python fondamentali, la rappresentazione potrebbe non essere utilizzabile. Questo potrebbe verificarsi nel caso in cui vengano inclusi oggetti come file, socket, classi o istanze, cosi come molti altri oggetti built-in non rappresentabili come costanti Python.
La rappresentazione formattata se può tiene gli oggetti su una singola riga, altrimenti se questa non rientra nella larghezza consentita, la spezza in righe multiple. Costruite esplicitamente oggetti PrettyPrinter se avete bisogno di aggiustare il limite della larghezza.
Il modulo pprint definisce una classe:
...) |
sys.stdout
. Per controllare la rappresentazione formattata,
possono venire usati tre parametri aggiuntivi. Le parole chiave sono
indent, depth e width. L'incremento di indentazione
che viene aggiunto per ogni livello ricorsivo viene specificato da
indent; il suo valore predefinito è uno.
Altri valori possono rendere l'aspetto dell'output un po' irregolare,
ma ciò può rendere più facilmente riconoscibili gli annidamenti. Il
numero dei livelli che possono venire stampati è controllato da
depth; se la struttura di dati da stampare è troppo profonda, il
successivo livello contenuto viene sostituito da "...". Non esiste
un limite predefinito sulla profondità degli oggetti che devono essere
formattati. La larghezza desiderata dell'output viene definita usando
il parametro width; il suo valore predefinito è otto caratteri.
Se non si riesce a formattare una struttura nell'intervallo di
lunghezza voluto, si dovrà fare uno sforzo maggiore.
>>> import pprint, sys >>> stuff = sys.path[:] >>> stuff.insert(0, stuff[:]) >>> pp = pprint.PrettyPrinter(indent=4) >>> pp.pprint(stuff) [ [ '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter'], '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter'] >>> >>> import parser >>> tup = parser.ast2tuple( ... parser.suite(open('pprint.py').read()))[1][1][1] >>> pp = pprint.PrettyPrinter(depth=6) >>> pp.pprint(tup) (266, (267, (307, (287, (288, (...))))))
La classe PrettyPrinter supporta diverse funzioni derivate:
object[, indent[, width[, depth]]]) |
object[, stream[, indent[, width[, depth]]]]) |
sys.stdout
. Questo può venire usato
nell'interprete interattivo al posto di un'istruzione print
per esaminare i valori. indent, width e depth
verranno passati come parametri di formattazione, al costruttore
PrettyPrinter.
>>> stuff = sys.path[:] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=869440>, '', '/usr/local/lib/python1.5', '/usr/local/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter']
object) |
>>> pprint.isreadable(stuff) False
object) |
Viene inoltre definita un'ulteriore funzione di supporto:
object) |
>>> pprint.saferepr(stuff) "[<Recursion on list with id=682968>, '', '/usr/local/lib/python1.5', '/usr/loca l/lib/python1.5/test', '/usr/local/lib/python1.5/sunos5', '/usr/local/lib/python 1.5/sharedmodules', '/usr/local/lib/python1.5/tkinter']"