简介
print与pprint模块都是Python的打印模块,其功能基本相同,但是区别是,pprint模块打印出来的数据结构更加的完整,更加方便阅读打印输出的结果,特别是对于特别长的数据打印。pprint可以采用分行打印输出,对于数据结构比较复杂,数据长度较长的数据,适合采用pprint打印方式。
类
pprint模块定义了一个名为PrettyPrinter的类,类的构造器如下:
class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False, sort_dicts=True)
#方法构造一个PrettyPrinter实例
#参数stream设定输出流,若没设定,则类默认设定输出流为sys.stdout
#参数indent表示每个输出的递归层的缩进值
#参数depth表示打印的数据结构层级数,若数据结构层级数太大,则将显示...
#参数width表示输出显示的宽度
#参数compact为Flase,则序列的每一项将分行显示,若为True,则序列每一项尽可能在同一行显示(width范围内)
#参数sort_dicts为True,则字典按照keys排序输出显示,否则按照插入顺序输出显示
范例:
>>> 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']
>>> pp = pprint.PrettyPrinter(width=41, compact=True)
>>> 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类提供的方法包括:
PrettyPrinter.pformat(object)
#方法返回对象object的格式化输出,但是不打印,格式参数为传递给类构造器的参数值
PrettyPrinter.pprint(object)
#方法打印对象object的格式化输出至类构建时指定的输出流,输出最后包含一个新行
模块提供的方法
pprint模块提供了一些方法,实现pprint模块的功能:
pprint.pformat(object, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)
#方法返回对象object的格式化输出字符串
pprint.pp(object, *args, sort_dicts=False, **kwargs)
#方法打印对象object的格式化输出字符串,输出最后包括一个换行
#参数args与kwargs将被传送给pprint方法,作为输出的格式参数
pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)
#方法打印对象object的格式化输出字符串至指定的输出流,输出最后包括一个换行
#该方法经常在python解释器中代替print方法
范例:
>>> 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']