| %% Author: Fred L. Drake, Jr. <fdrake@acm.org> |
| |
| \section{Standard module \sectcode{pprint}} |
| \stmodindex{pprint} |
| |
| The \code{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 PrettyPrinter objects explicitly if you need |
| to adjust the width constraint. |
| |
| The \code{pprint} module defines one class: |
| |
| \renewcommand{\indexsubitem}{(in module pprint)} |
| |
| % First the implementation class: |
| |
| \begin{funcdesc}{PrettyPrinter}{...} |
| Construct a 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 \code{write()} method. If not specified, the |
| 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{funcdesc} |
| |
| |
| % Now the derivative functions: |
| |
| The 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 |
| \code{print} command 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 |
| \code{eval()}. Note that this 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 \code{<Recursion on \var{typename} with id=\var{number}>}. The |
| representation is not otherwise formatted. |
| |
| \begin{verbatim} |
| >>> pprint.saferepr(stuff) |
| "[<Recursion on list with id=682968>, '', '/usr/local/lib/python1.4', '/usr/loca |
| l/lib/python1.4/test', '/usr/local/lib/python1.4/sunos5', '/usr/local/lib/python |
| 1.4/sharedmodules', '/usr/local/lib/python1.4/tkinter']" |
| \end{verbatim} |
| \end{funcdesc} |
| |
| |
| \subsection{PrettyPrinter Objects} |
| |
| PrettyPrinter instances (returned by \code{PrettyPrinter()} above) |
| have the following methods. |
| |
| \renewcommand{\indexsubitem}{(PrettyPrinter method)} |
| |
| \begin{funcdesc}{pformat}{object} |
| Return the formatted representation of \var{object}. This takes into |
| account the options passed to the PrettyPrinter constructor. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{pprint}{object} |
| Print the formatted representation of \var{object} on the configured |
| stream, followed by a newline. |
| \end{funcdesc} |
| |
| 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 PrettyPrinter objects |
| don't need to be created. |
| |
| \begin{funcdesc}{isreadable}{object} |
| Determine if the formatted representation of the object is |
| ``readable,'' or can be used to reconstruct the value using |
| \code{eval()}. Note that this returns false for recursive objects. |
| If the \var{depth} parameter of the PrettyPrinter is set and the |
| object is deeper than allowed, this returns false. |
| \end{funcdesc} |
| |
| \begin{funcdesc}{isrecursive}{object} |
| Determine if the object requires a recursive representation. |
| \end{funcdesc} |