8.18. pprint-数据漂亮的打印机

源代码: Lib/pprint.py


pprint模块提供了一种以可以用作解释器 Importing 的形式“漂亮地打印”任意 Python 数据结构的Function。如果格式化的结构包含不是基本 Python 类型的对象,则表示可能无法加载。如果包括诸如文件,套接字,类或实例之类的对象,以及许多其他无法用 Python 常量表示的内置对象,则可能是这种情况。

如果可以的话,格式化的表示形式会将对象保留在一行上,如果对象超出允许的宽度,则将它们分成多行。如果需要调整宽度约束,则显式构造PrettyPrinter对象。

在版本 2.5 中进行了更改:在计算显示之前,词典按键排序;在 2.5 之前的版本中,仅在字典显示需要多行的情况下才对字典进行排序,尽管没有记录。

在 2.6 版中进行了更改:添加了对setfrozenset的支持。

pprint模块定义了一个类别:

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff[:])
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(stuff)
[   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
    'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> pp = pprint.PrettyPrinter(depth=6)
>>> pp.pprint(tup)
('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))

PrettyPrinter类支持几个派生函数:

在版本 2.4 中更改:添加了参数* indent width depth *。

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff)
>>> pprint.pprint(stuff)
[<Recursion on list with id=...>,
 'spam',
 'eggs',
 'lumberjack',
 'knights',
 'ni']

在版本 2.4 中更改:添加了参数* indent width depth *。

>>> pprint.isreadable(stuff)
False

还定义了另一种支持Function:

>>> pprint.saferepr(stuff)
"[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"

8.18.1. PrettyPrinter 对象

PrettyPrinter个实例具有以下方法:

以下方法提供了具有相同名称的相应Function的实现。由于不需要创建新的PrettyPrinter对象,因此在实例上使用这些方法的效率稍高。

该方法作为一个钩子提供,以允许子类修改将对象转换为字符串的方式。默认实现使用saferepr()实现的内部。

2.3 版的新Function。

8.18.2. pprint 示例

本示例演示了pprint()函数及其参数的几种用法。

>>> import pprint
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> stuff = ['a' * 10, tup, ['a' * 30, 'b' * 30], ['c' * 20, 'd' * 20]]
>>> pprint.pprint(stuff)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, depth=3)
['aaaaaaaaaa',
 ('spam', ('eggs', (...))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, width=60)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights',
     ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
首页