前不久写了一篇回顾print在Python中的发展历史的文章,提到了两条发展线索:明显:早期的print语句有C和Shell的影子,是应用级别声明,前十年经历了PEP-214和PEP-259的改进;然后在2009年的3.0大版本中,语句改成了print()函数,在3.3版本中做了一次功能增强,最终上升为一级内置函数。HiddenLine:介绍print的竞争者,比如传统的日志记录模块logging,调试模块pdb,主流IDE的调试功能,以及后起之秀PySnooper。这篇文章还是和print有关,而我要介绍的是标准库中的pprint模块。(未经授权请勿转载,文章首发于:https://mp.weixin.qq.com/s/d1...)pprint是“prettyprinter”的简称,“pretty”的意思是“漂亮,漂亮”,而“相当”的程度,所以它的意思是:(相当)漂亮的印刷。这是一个相当简单但有用的模块,主要用于打印复杂的数据结构对象,例如多级嵌套列表、元组和字典。我们来看一个print()打印的例子:mylist=["Beautifulisbetterthanugly.","Explicitisbetterthanimplicit.","Simpleisbetterthancomplex.","Complexisbetterthancomplicated."]print(mylist)#结果如下:['美丽胜于丑陋。','明确胜于隐含。','简单胜于复杂。','复杂胜于复杂。']这是一个简单的示例,全部打印在一行上。想象一下,如果对象中的元素是多层嵌套的内容(比如复杂的Json数据),或者元素太多(比如列表中存储了很多的URL链接),然后打印出来呢?那一定是一团糟而且不容易阅读。使用pprint模块的pprint()代替print()可以解决以下痛点:设置合适的线宽,做合适的换行,设置打印的缩进和层级,进行格式化打印,判断是否死循环1.简单使用语法:pprint(object,stream=None,indent=1,width=80,depth=None,*,compact=False)默认线宽参数为80,当打印字符(character)小于80个,pprint()基本等同于内置函数print()。当字符超过时,它会美化并格式化输出:importpprint#printmylist上例中的pprint.pprint(mylist)#打印的元素是换行符(因为超过了80个字符):['美丽胜于丑陋。','明确优于隐含。','简单优于复杂。','复杂优于复杂。']2.将缩进设置为4个空格(默认为1)pprint.pprint(mylist,indent=4)['Beautifulisbetterthanugly.','Explicitisbetterthanimplicit.','Simpleisbetterthancomplex.','Complexisbetterthancomplicated.']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:{'学生':[{'年龄':18,'姓名':'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.优化theloopstructurePrinting当循环引用出现在列表或其他数据结构中时,不可能把所有的内容都打印出来,所以简化打印,就像上面的例子一样,只打印外壳,不打印内层循环印刷的东西。这种处理方式简化了,但是没有指出是谁造成了循环,容易漏掉。pprint()方法已得到改进。当遇到死循环结构时,会用
