Le module pprint permet d'imprimer ``joliment'' des structures de données Python arbitraires sous une forme qui peut servir de donnée d'entrée à l'interpréteur. Si les structures formatées incluent des objets qui ne sont pas d'un des types fondamentaux de Python, il se peut que la représentation ne puisse pas être chargée. Cela peut être le cas si des objets comme les fichiers, les sockets, les classes, ou des instances sont inclus, ainsi que de nombreux autres objets intégrés qui ne peuvent pas être représentés comme des constantes Python.
La représentation formatée conserve les objets sur une seule ligne si possible, et les répartit sur plusieurs lignes s'ils ne tiennent pas dans la largeur autorisée. Construisez les objets PrettyPrinterexplicitement si vous avez besoin d'ajuster la contrainte de largeur.
Le module pprint définit une classe:
sys.stdout. Trois paramètres
supplémentaires peuvent servir à contrôler la représentation
formatée. Les mots-clés sont indent, depth, et
width. Le nombre de caractères d'indentation défini pour
chaque niveau récursif est défini par indent; la valeur par
défaut est un. D'autres valeurs peuvent donner au résultat un
aspect assez étrange, mais peut faire apparaître les emboîtements
plus nettement. Le nombre de niveaux qui peuvent être imprimés est
contrôlé par depth; si la structure de données est trop
profonde, le niveau imbriqué suivant sera remplacé par "...".
Par défaut, il n'y a aucune contrainte sur la profondeur des
objets à formater. La largeur voulue pour le résultat est limitée
par le paramètre width; par défaut, 80 caractères. Si une
structure ne peut pas être formatée à l'intérieur de la contrainte
de largeur, le programme fera de son mieux.
>>> 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 supporte plusieurs fonctions dérivées:
sys.stdout est
utilisé. On peut s'en servir dans l'interpréteur interactif à la place
d'une instruction print pour inspecter des valeurs. Les paramètres
de formatage par défaut sont utilisés.
>>> 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']
>>> pprint.isreadable(stuff) 0
Une autre fonction support est aussi définie:
>>> 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']"