打印,是所有程序员从小白时期就具备的神技,遇事不决打印一下,是 DEBUG 最简单且不依赖 IDE 的方式,自定义各种日志输出,也是项目成型后必备功能。
但是为了优雅的打印格式,往往需要对各种对象进行特殊格式化,可遇到字典和大段字符串也不好处理。
这篇文章介绍两个库模块,可以快速有效的解决所有 Python 对象的打印输出,没错,所有。
pprint
这是 Python 标准库模块,全称 pretty printer,可以让各种数据结构更美观地输出。
pprint.pprint
(object, stream=None, indent=1, width=80, depth=None, *, compact=False)
- stream:输出流,默认是 sys.stdout ,也就是屏幕输出。
- indent:缩进空格数。
- width:每行最大宽度,默认为80个字符,超过宽度会换行,但如果单个对象超过不会被换行,比如一段长字符串。
- depth:限制数据的层级,设置后可以限制过多的嵌套。
- compact:3.4版本新加入的参数,若设为 True ,则输出会在接近 width 限制才进行换行。
pprint.pformat
(object, indent=1, width=80, depth=None, *, compact=False)
和 pprint.pprint
的区别是,该函数不会打印到输出流,而是返回一个格式化字符串。
classpprint.PrettyPrinter
(indent=1, width=80, depth=None, stream=None, *, compact=False)
上文两个函数,实际都是构建一个 PrettyPrinter
对象,并调用对应的方法,所以当需要复用格式化的时候,我们可以提前构建该对象。
更多用法可以参考官方文档:
8.11. pprint - Data pretty printer - Python 3.5.6 documentationdocs.python.org
pprint
对字典 列表这类数据结构确实很好用,但遇到类、字符串仍然和 print 差别不大,因此这里有一个国人写的第三方库介绍给大家。
beeprint
除了和 pprint 一样支持 dict, list, tuple 等常规变量的格式化输出,还支持 object 变量打印、长文本自动剪切。
下面是作者 README 中和 pprint 的对比:
pprint:
beeprint:
pprint:
beeprint:
pprint:
beeprint:
pprint:
beeprint:
beeprint.pp
(o, output=True, max_depth=5, indent=2, width=80, sort_keys=True, config=None, **kwargs):
参数和 pprint 类似,多出了 sort_keys可以打印字典时是否按 key 排序( pprint 是默认排序,不可选),另外还有控制文本裁剪等行为的参数,可以从 beeprint.Config
里查看。
该库的 Github:https://github.com/panyanyany/beeprint
欢迎关注
微信公众号:面向人生编程
编程思维不应只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。