美文网首页python模块Pythonpython
python美化打印的标准库:pprint()

python美化打印的标准库:pprint()

作者: 大白python | 来源:发表于2019-09-14 08:36 被阅读0次

    pprint 是“pretty printer”的简写,“pretty”的含义是“漂亮的、美观的”,还有表示“相当地”的程度语气,因此它的含义便是:(相当)美观的打印。

    这是个相当简单却有用的模块,主要用于打印复杂的数据结构对象,例如多层嵌套的列表、元组和字典等。

    多层嵌套的内容(例如复杂的 Json 数据),或者有超多的元素(例如在列表中存了很多 URL 链接),再打印出来会是怎样?

    那肯定是一团糟的,不好阅读。

    使用 pprint 模块的 pprint() 替代 print(),可以解决如下痛点:

    • 设置合适的行宽度,作适当的换行
    • 设置打印的缩进、层级,进行格式化打印
    • 判断对象中是否有无限循环,并优化打印内容

    1、简单使用

    语法:pprint(object, stream=None, indent=1, width=80, depth=None,,compact=False)

    默认的行宽度参数为 80,当打印的字符(character)小于 80 时,pprint() 基本上等同于内置函数 print(),当字符超出时,它会作美化,进行格式化输出:

    mylist = ["Beautiful is better than ugly.", "Explicit is better than implicit.", "Simple is better than complex.", "Complex is better than complicated."]
    
    import pprint
    
    # 打印上例的 mylist
    pprint.pprint(mylist)
    
    # 打印的元素是换行的(因为超出80字符):
    ['Beautiful is better than ugly.',
     'Explicit is better than implicit.',
    'Simple is better than complex.',
     'Complex is better than complicated.']
    

    2、设置缩进为 4 个空格(默认为1)

    pprint.pprint(mylist, indent=4)
    
    [   'Beautiful is better than ugly.',
        'Explicit is better than implicit.',
        'Simple is better than complex.',
        'Complex is better than complicated.']
    

    3、设置打印的行宽

    mydict = {'students': [{'name':'Tom', 'age': 18},{'name':'Jerry', 'age': 19}]}
    
    pprint.pprint(mydict)
    
    # 未超长:
    {'students': [{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jerry'}]}
    
    pprint.pprint(mydict, width=20)
    
    # 超长1:
    {'students': [{'age': 18,
                   'name': 'Tom'},
                  {'age': 19,
                   'name': 'Jerry'}]}
    
    pprint.pprint(mydict, width=70)
    
    # 超长2:
    {'students': [{'age': 18, 'name': 'Tom'},
                  {'age': 19, 'name': 'Jerry'}]}
    

    4、设置打印的层级(默认全打印)

    newlist = [1, [2, [3, [4, [5]]]]]
    
    pprint.pprint(newlist, depth=3)
    
    # 超出的层级会用...表示
    [1, [2, [3, [...]]]]
    

    5、优化循环结构的打印

    newlist = [1, 2]
    newlist.insert(0, newlist)
    
    # 列表元素指向列表自身,造成循环引用
    # 直接 print 的结果是:[[...], 1, 2]
    
    pprint.pprint(newlist)
    # [<Recursion on list with id=1741283656456>, 1, 2]
    
    pprint.saferepr(newlist)
    # '[<Recursion on list with id=1741283656456>, 1, 2]'
    

    6、判断是否出现循环结构

    有两个方法判断一个对象中是否出现无限循环:

    pprint.isrecursive(newlist)
    # True
    
    pprint.isreadable(newlist)
    # False
    

    isreadable() 除了能像 isrecursive() 一样判断循环,还能判断该格式化内容是否可被 eval() 重构。

    ps: 更进一步详细学习:
    官方介绍:https://docs.python.org/zh-cn/3/library/pprint.html
    
    源码地址:https://github.com/python/cpython/blob/3.7/Lib/pprint.py
    
    大白python.png

    相关文章

      网友评论

        本文标题:python美化打印的标准库:pprint()

        本文链接:https://www.haomeiwen.com/subject/cgkwectx.html