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'})]

  

 

posted @ 2020-03-27 16:01  King~~~  阅读(226)  评论(0编辑  收藏  举报