pprint--------美观打印数据结构
作用:美观打印数据结构。
pprint包含一个“美观打印机"(pprint printer),用于生成数据结构的一个美观视图。格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读。输出尽可能放在一行上,分解为多行是则需要缩进。
1.打印
要使用这个模块,最简单的方法就是利用pprint()函数。
from pprint import pprint
data = [
(1,{'a':'A','b':'B'}),
(2,{'c':'C','d':'D'}),
(3,{'e':'E','f':'F'}),
]
print('print')
print(data)
print('pprint')
pprint(data)
pprint()格式化一个对象,并把它写至一个数据流,这个数据流作为参数传入(或者是默认的sys.stdout)
print
[(1, {'a': 'A', 'b': 'B'}), (2, {'c': 'C', 'd': 'D'}), (3, {'e': 'E', 'f': 'F'})]
pprint
[(1, {'a': 'A', 'b': 'B'}),
(2, {'c': 'C', 'd': 'D'}),
(3, {'e': 'E', 'f': 'F'})]
2.格式化
要格式化一个数据结构而不把它直接写至一个流(例如用于日志记录),可以使用pformat()来构造一个字符串表示。
from pprint import pformat str = pformat(data) print(str)
3.任意类
如果定制类定义了一个__repr__()方法,pprint()使用的PrettyPrinter类还可以处理这些定制类。
class node():
def __init__(self,name,contents=[]):
self.name = name
self.contents = contents[:]
def __repr__(self):
return ('node(' + repr(self.name) + ',' + repr(self.contents) + ')')
trees = [
node('node-1'),
node('node-2',[node('node-2-1')]),
node('node-3',[node('node-3-1')]),
]
pprint(trees)
4.递归
递归数据结构有指向数据源的引用来表示,形式为<Recursion on typename with id=number>。
local_data = ['a', 'b', 1, 2]
local_data.append(local_data)
print('id(local_data)', id(local_data))
pprint(local_data)
在这个例子中,列表local_data增加到其自身,这会创建一个递归引用。
id(local_data) 30299208 ['a', 'b', 1, 2, <Recursion on list with id=30299208>]
5.限制嵌套输出
对于非常深的数据结构,可能不要求输出包含所有系解。有可能数据没有适当地格式化,也可能格式化文本过大而无法管理,或者默写数据是多余的。
pprint(data,depth=2)
使用depth参数可以控制美观打印机递归处理数据结构的深度。输出中未包含的层次有一个省略号表示。
[(1, {...}), (2, {...}), (3, {...})]
6.控制输出宽度
格式化文本的默认输出宽度为80列。要调整这个宽度,可以在pprint()中使用参数width。
for width in [80, 5]:
print('WIDTH =', width)
pprint(data, width = width)
宽度大小不能适应格式化数据结构是,如果截断或转行会引入非法的语法,就不会进行截断或转行。
WIDTH = 80
[(1, {'a': 'A', 'b': 'B'}),
(2, {'c': 'C', 'd': 'D'}),
(3, {'e': 'E', 'f': 'F'})]
WIDTH = 5
[(1,
{'a': 'A',
'b': 'B'}),
(2,
{'c': 'C',
'd': 'D'}),
(3,
{'e': 'E',
'f': 'F'})]
King@_@

浙公网安备 33010602011771号