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@_@