1. 引言

pprint的英文全称Data pretty printer,顾名思义就是让显示结果更加直观漂亮。
print()pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果。特别是对于特别长的数据打印,print()输出结果都在一行,不方便查看,而pprint()采用分行打印输出,所以对于数据结构比较复杂、数据长度较长的数据,适合采用pprint()打印方式。
在介绍完上述理论知识后,我们不妨来举个栗子吧!

2. 使用背景

我们来看一个打印嵌套字典的例子,如下所示:

d = {"apple": {"juice":4, "pie":5},"orange": {"juice":6, "cake":7},"pear": {"cake":8, "pie":9}
}

如果使用默认的print来进行打印,得到输出如下:

{'apple': {'juice': 4, 'pie': 5}, 'orange': {'juice': 6, 'cake': 7}, 'pear': {'cake': 8, 'pie': 9}}

上述输出都堆在一行,显得很混乱,缺少可读性。为了让输出显得有条理,我曾经写过一个for循环来打印如下内容:

for k,v in d.items():print(k, "->", v)

此时的输出如下:

apple -> {'juice': 4, 'pie': 5}
orange -> {'juice': 6, 'cake': 7}
pear -> {'cake': 8, 'pie': 9}

上述代码很容易让人理解,但我必须浪费宝贵的时间来输入for循环。上述常见就是Python的pprint发挥作用的地方。

3. pprint 大法好

有了上述的简短介绍,我们这里直接使用pprint来打印上述字典,样例代码如下:

from pprint import pprint
pprint(d)

输出如下:


{'apple': {'juice': 4, 'pie': 5},'orange': {'cake': 7, 'juice': 6},'pear': {'cake': 8, 'pie': 9}}

需要注意的是,pprint以人类可读的格式很好地格式化了嵌套字典,而不需要像前面的示例中那样来编写for循环实现同样的功能。

4. 设定输出宽度

在了解了pprint的入门示例后,我们来看看该函数的其他高级用法。这里我们不妨以一个三层嵌套字典为例来进行讲解,示例如下:

d = {"apple": {"juice": {1:2, 3:4, 5:6}, "pie": {1:3, 2:4, 5:7}, },"orange": {"juice": {1:5, 2:3, 5:6},"cake": {5:4, 3:2, 6:5},},"pear": {"cake": {1:6, 6:1, 7:8},"pie": {3:5, 5:3, 8:7},}
}

其实,在pprint函数中有一个参数width可以控制每行输出的宽度,直接使用pprint输出如下:

pprint(d)
# output
{'apple': {'juice': {1: 2, 3: 4, 5: 6}, 'pie': {1: 3, 2: 4, 5: 7}},'orange': {'cake': {3: 2, 5: 4, 6: 5}, 'juice': {1: 5, 2: 3, 5:6}},'pear': {'cake': {1: 6, 6: 1, 7: 8}, 'pie': {3: 5, 5: 3, 8: 7}}}

将宽度设置为50,此时输出如下:

pprint(d, width=50)
# output:
{'apple': {'juice': {1: 2, 3: 4, 5: 6},'pie': {1: 3, 2: 4, 5: 7}},'orange': {'cake': {3: 2, 5: 4, 6: 5},'juice': {1: 5, 2: 3, 5: 6}},'pear': {'cake': {1: 6, 6: 1, 7: 8},'pie': {3: 5, 5: 3, 8: 7}}}

将宽度设置为30,此时输出如下:

pprint(d, width=30)
# output{'apple': {'juice': {1: 2,3: 4,5: 6},'pie': {1: 3,2: 4,5: 7}},'orange': {'cake': {3: 2,5: 4,6: 5},'juice': {1: 5,2: 3,5: 6}},'pear': {'cake': {1: 6,6: 1,7: 8},'pie': {3: 5,5: 3,8: 7}}}

5. 设定输出缩进

我们以下面这个字典为例来讲解缩进参数indent 的作用:

d = {"apple": {"juice":4, "pie":5},"orange": {"juice":6, "cake":7},"pear": {"cake":8, "pie":9}
}

默认不设置缩进的输出如下:

pprint(d)
# output
{'apple': {'juice': 4, 'pie': 5},'orange': {'cake': 7, 'juice': 6},'pear': {'cake': 8, 'pie': 9}}

将缩进设置为4时的输出如下:

pprint(d, indent=4)
# output
{   'apple': {'juice': 4, 'pie': 5},'orange': {'cake': 7, 'juice': 6},'pear': {'cake': 8, 'pie': 9}}

将缩进设置为8时的输出如下:

pprint(d, indent=8)
# output
{       'apple': {'juice': 4, 'pie': 5},'orange': {'cake': 7, 'juice': 6},'pear': {'cake': 8, 'pie': 9}}

6. 总结

本文重点介绍了Python中的pprint模块,使用该模块可以提升我们减少我们编写代码的行数同时增加我们复杂数据结构输出的可读性。

您学废了吗?


关注公众号《AI算法之道》,获取更多AI算法资讯。

一文弄懂Python中的pprint相关推荐

  1. 一文弄懂python中的函数(自定义函数,匿名函数,高阶函数与解析式)

    什么是函数,如何在 Python 程序中定义函数呢? 说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用. python中的自定义函数 Python 的函数具有非常灵活多样的参数形 ...

  2. 一文弄懂Python中的Lambda表达式

    1. 引言 不管大家是Python新手还是老手 ,一定都听说过Lambda 函数.它的语法简单而且用起来相当方便. 本文主要是介绍Python lambda 函数的,为了阅读方便,分为以下 3 个部分 ...

  3. 一文弄懂Python中的*args 和 **kwargs

    1. 引言 在本文中,我们将讨论 Python 中的 *args 和 **kwargs 及其用法和示例. 闲话少说,我们直接开始吧. 2. 问题引入 在Python中写函数的时候,我们经常需要给函数传 ...

  4. 一文弄懂Python中的 if __name__ == __main__

    1. 引言 在Python相关代码中,我们经常会遇到如下代码段: # stuff if __name__ == "__main__":# do stuff 本文将尽可能使用简单的样 ...

  5. 一文弄懂神经网络中的反向传播法

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  6. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法--BackPropagation 最近在看深度学习的东 ...

  7. deque stack java_一文弄懂java中的Queue家族

    简介 java中Collection集合有三大家族List,Set和Queue.当然Map也算是一种集合类,但Map并不继承Collection接口. List,Set在我们的工作中会经常使用,通常用 ...

  8. 彻底弄懂Python中的GIL锁

    彻底弄懂Python中的GIL锁 转载:https://blog.csdn.net/yushuaigee/article/details/86537474 刚学习python时,我关注了许多介绍pyt ...

  9. if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;

    我们在python模块那章节的学习,有所接触到if __name__ == '__main__'这个概念.当时我们只是大概描述了一番,不少伙伴还是有所困惑,今天就让我们通过实际例子去讲解这条语句到底有 ...

最新文章

  1. Windows10快捷应用指令
  2. bzoj1025 [SCOI2009]游戏 动态规划
  3. 用matlab绘制升余弦函数
  4. 为什么人类的大脑认为数学“美”?
  5. 调整心态,正确应对所学技术的失宠?(至F#,SL的学习者们)
  6. backgroundworker 在执行dowork事件时该如何取消_澳航官宣!明年上半年起,机场所有售票处和服务台永久取消,订票改签等只能“自助”...
  7. vmware 中安装chrome os操作系统
  8. 软件设计师考试真题链接
  9. 记12306货运系统“抢订空车”插件的编写--流程简化及核心代码
  10. 89c51汇编语言波形发生器,51单片机汇编语言实现波形发生器.docx
  11. 在macOS系统下外接硬盘安装windows10虚拟机
  12. 微信公众号网页OAuth2.0授权自动登录(Java版)
  13. html 手机语音聊天,好用的手机语音聊天软件推荐
  14. ubuntu 使用GParted对Ubuntu /dev/sda1进行磁盘扩容
  15. vb.net 教程 20-4 库存管理系统3.14 出库单操作(FormStorageOutOrder)
  16. 基于STM32单片机和RFID的智能考勤系统设计
  17. HTML5+CSS3开发-胡杨柳依-专题视频课程
  18. 【Java】自然对数的求法
  19. Android网络篇
  20. 单变量线性回归实验分析

热门文章

  1. Redis分布式锁浅析
  2. 初次使用IDEA启动web项目出现如下错误
  3. 想创业 先学如何获得投资
  4. Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解
  5. 脱口而出口语100句
  6. Django综合案例之英雄人物2
  7. 发电机为什么需要用到接地电阻柜
  8. Robotaxi公司做L2前装量产,机遇与挑战并存
  9. 特斯拉车钥匙低功耗评测过程中,发现一个奇怪问题,路过的大神帮忙看看!
  10. Outlook超大附件解决方案哪家强?可从四方面比较