mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 03:22:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{\module{pprint} ---
 | 
						|
         Data pretty printer}
 | 
						|
 | 
						|
\declaremodule{standard}{pprint}
 | 
						|
\modulesynopsis{Data pretty printer.}
 | 
						|
\moduleauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
 | 
						|
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
 | 
						|
 | 
						|
 | 
						|
The \module{pprint} module provides a capability to ``pretty-print''
 | 
						|
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,
 | 
						|
and breaks them onto multiple lines if they don't fit within the
 | 
						|
allowed width.  Construct \class{PrettyPrinter} objects explicitly if
 | 
						|
you need to adjust the width constraint.
 | 
						|
 | 
						|
The \module{pprint} module defines one class:
 | 
						|
 | 
						|
 | 
						|
% First the implementation class:
 | 
						|
 | 
						|
\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.
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
>>> 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, (...))))))
 | 
						|
\end{verbatim}
 | 
						|
\end{classdesc}
 | 
						|
 | 
						|
 | 
						|
% Now the derivative functions:
 | 
						|
 | 
						|
The \class{PrettyPrinter} class supports several derivative functions:
 | 
						|
 | 
						|
\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
 | 
						|
\keyword{print} statement for inspecting values.  The default
 | 
						|
parameters for formatting are used.
 | 
						|
 | 
						|
\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
 | 
						|
\function{eval()}\bifuncindex{eval}.  This always returns false for
 | 
						|
recursive objects.
 | 
						|
 | 
						|
\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
 | 
						|
as \samp{<Recursion on \var{typename} with id=\var{number}>}.  The
 | 
						|
representation is not otherwise formatted.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
% This example is outside the {funcdesc} to keep it from running over
 | 
						|
% the right margin.
 | 
						|
\begin{verbatim}
 | 
						|
>>> 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']"
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
 | 
						|
\subsection{PrettyPrinter Objects}
 | 
						|
\label{PrettyPrinter Objects}
 | 
						|
 | 
						|
\class{PrettyPrinter} instances have the following methods:
 | 
						|
 | 
						|
 | 
						|
\begin{methoddesc}{pformat}{object}
 | 
						|
Return the formatted representation of \var{object}.  This takes into
 | 
						|
Account the options passed to the \class{PrettyPrinter} constructor.
 | 
						|
\end{methoddesc}
 | 
						|
 | 
						|
\begin{methoddesc}{pprint}{object}
 | 
						|
Print the formatted representation of \var{object} on the configured
 | 
						|
stream, followed by a newline.
 | 
						|
\end{methoddesc}
 | 
						|
 | 
						|
The following methods provide the implementations for the
 | 
						|
corresponding functions of the same names.  Using these methods on an
 | 
						|
instance is slightly more efficient since new \class{PrettyPrinter}
 | 
						|
objects don't need to be created.
 | 
						|
 | 
						|
\begin{methoddesc}{isreadable}{object}
 | 
						|
Determine if the formatted representation of the object is
 | 
						|
``readable,'' or can be used to reconstruct the value using
 | 
						|
\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.
 | 
						|
\end{methoddesc}
 | 
						|
 | 
						|
\begin{methoddesc}{isrecursive}{object}
 | 
						|
Determine if the object requires a recursive representation.
 | 
						|
\end{methoddesc}
 |