| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{pprint} --- | 
					
						
							|  |  |  |          Data pretty printer.} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-18 21:10:32 +00:00
										 |  |  | \declaremodule{standard}{pprint} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | \modulesynopsis{Data pretty printer.} | 
					
						
							| 
									
										
										
										
											1999-02-18 21:10:32 +00:00
										 |  |  | \moduleauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
					
						
							|  |  |  | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | The \module{pprint} module provides a capability to ``pretty-print'' | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | arbitrary Python data structures in a form which can be used as input | 
					
						
							|  |  |  | to the interpreter.  If the formatted structures include objects which | 
					
						
							|  |  |  | are not fundamental Python types, the representation may not be | 
					
						
							|  |  |  | loadable.  This may be the case if objects such as files, sockets, | 
					
						
							|  |  |  | classes, or instances are included, as well as many other builtin | 
					
						
							|  |  |  | objects which are not representable as Python constants. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The formatted representation keeps objects on a single line if it can, | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | and breaks them onto multiple lines if they don't fit within the | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | allowed width.  Construct \class{PrettyPrinter} objects explicitly if | 
					
						
							|  |  |  | you need to adjust the width constraint. | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | The \module{pprint} module defines one class: | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | % First the implementation class:
 | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | \begin{classdesc}{PrettyPrinter}{...} | 
					
						
							|  |  |  | Construct a \class{PrettyPrinter} instance.  This constructor | 
					
						
							|  |  |  | understands several keyword parameters.  An output stream may be set | 
					
						
							|  |  |  | using the \var{stream} keyword; the only method used on the stream | 
					
						
							|  |  |  | object is the file protocol's \method{write()} method.  If not | 
					
						
							|  |  |  | specified, the \class{PrettyPrinter} adopts \code{sys.stdout}.  Three | 
					
						
							|  |  |  | additional parameters may be used to control the formatted | 
					
						
							|  |  |  | representation.  The keywords are \var{indent}, \var{depth}, and | 
					
						
							|  |  |  | \var{width}.  The amount of indentation added for each recursive level | 
					
						
							|  |  |  | is specified by \var{indent}; the default is one.  Other values can | 
					
						
							|  |  |  | cause output to look a little odd, but can make nesting easier to | 
					
						
							|  |  |  | spot.  The number of levels which may be printed is controlled by | 
					
						
							|  |  |  | \var{depth}; if the data structure being printed is too deep, the next | 
					
						
							|  |  |  | contained level is replaced by \samp{...}.  By default, there is no | 
					
						
							|  |  |  | constraint on the depth of the objects being formatted.  The desired | 
					
						
							|  |  |  | output width is constrained using the \var{width} parameter; the | 
					
						
							|  |  |  | default is eighty characters.  If a structure cannot be formatted | 
					
						
							|  |  |  | within the constrained width, a best effort will be made. | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | >>> import pprint, sys | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | >>> stuff = sys.path[:] | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | >>> stuff.insert(0, stuff[:]) | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | >>> pp = pprint.PrettyPrinter(indent=4) | 
					
						
							|  |  |  | >>> pp.pprint(stuff) | 
					
						
							|  |  |  | [   [   '', | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  |         '/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'], | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  |     '', | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  |     '/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'] | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | >>> | 
					
						
							|  |  |  | >>> 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, (...)))))) | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | \end{classdesc} | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Now the derivative functions:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | The \class{PrettyPrinter} class supports several derivative functions: | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{pformat}{object} | 
					
						
							|  |  |  | Return the formatted representation of \var{object} as a string.  The | 
					
						
							|  |  |  | default parameters for formatting are used. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{pprint}{object\optional{, stream}} | 
					
						
							|  |  |  | Prints the formatted representation of \var{object} on \var{stream}, | 
					
						
							|  |  |  | followed by a newline.  If \var{stream} is omitted, \code{sys.stdout} | 
					
						
							|  |  |  | is used.  This may be used in the interactive interpreter instead of a | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | \keyword{print} statement for inspecting values.  The default | 
					
						
							|  |  |  | parameters for formatting are used. | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | >>> 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'] | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{isreadable}{object} | 
					
						
							|  |  |  | Determine if the formatted representation of \var{object} is | 
					
						
							|  |  |  | ``readable,'' or can be used to reconstruct the value using | 
					
						
							| 
									
										
										
										
											1998-04-03 07:11:32 +00:00
										 |  |  | \function{eval()}\bifuncindex{eval}.  This always returns false for | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | recursive objects. | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | >>> pprint.isreadable(stuff) | 
					
						
							|  |  |  | 0 | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{isrecursive}{object} | 
					
						
							|  |  |  | Determine if \var{object} requires a recursive representation. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | One more support function is also defined: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{saferepr}{object} | 
					
						
							|  |  |  | Return a string representation of \var{object}, protected against | 
					
						
							|  |  |  | recursive data structures.  If the representation of \var{object} | 
					
						
							|  |  |  | exposes a recursive entry, the recursive reference will be represented | 
					
						
							| 
									
										
										
										
											1997-12-17 14:07:25 +00:00
										 |  |  | as \samp{<Recursion on \var{typename} with id=\var{number}>}.  The | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | representation is not otherwise formatted. | 
					
						
							| 
									
										
										
										
											1998-03-08 07:03:27 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-08 07:03:27 +00:00
										 |  |  | % This example is outside the {funcdesc} to keep it from running over
 | 
					
						
							|  |  |  | % the right margin.
 | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | \begin{verbatim} | 
					
						
							|  |  |  | >>> pprint.saferepr(stuff) | 
					
						
							| 
									
										
										
										
											1998-04-03 07:11:32 +00:00
										 |  |  | "[<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']" | 
					
						
							| 
									
										
										
										
											1997-07-24 15:39:16 +00:00
										 |  |  | \end{verbatim} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{PrettyPrinter Objects} | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | \label{PrettyPrinter Objects} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-08 07:03:27 +00:00
										 |  |  | \class{PrettyPrinter} instances have the following methods: | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \begin{methoddesc}{pformat}{object} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | Return the formatted representation of \var{object}.  This takes into | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | Account the options passed to the \class{PrettyPrinter} constructor. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \begin{methoddesc}{pprint}{object} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | Print the formatted representation of \var{object} on the configured | 
					
						
							|  |  |  | stream, followed by a newline. | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The following methods provide the implementations for the | 
					
						
							|  |  |  | corresponding functions of the same names.  Using these methods on an | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | instance is slightly more efficient since new \class{PrettyPrinter} | 
					
						
							|  |  |  | objects don't need to be created. | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \begin{methoddesc}{isreadable}{object} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | Determine if the formatted representation of the object is | 
					
						
							|  |  |  | ``readable,'' or can be used to reconstruct the value using | 
					
						
							| 
									
										
										
										
											1998-02-20 06:03:52 +00:00
										 |  |  | \function{eval()}\bifuncindex{eval}.  Note that this returns false for | 
					
						
							|  |  |  | recursive objects.  If the \var{depth} parameter of the | 
					
						
							|  |  |  | \class{PrettyPrinter} is set and the object is deeper than allowed, | 
					
						
							|  |  |  | this returns false. | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \begin{methoddesc}{isrecursive}{object} | 
					
						
							| 
									
										
										
										
											1997-07-18 20:41:58 +00:00
										 |  |  | Determine if the object requires a recursive representation. | 
					
						
							| 
									
										
										
										
											1998-03-27 05:27:08 +00:00
										 |  |  | \end{methoddesc} |