【Python】pprint()

在 Python 中,pprint 是 "pretty-print" 的缩写,表示用一种更优雅、更可读的方式打印输出。pprint 模块是 Python 的标准库之一,被设计用来打印 Python 对象到控制台上的一种可读性更高的格式。这尤其适用于数据结构复杂的对象,例如嵌套的字典或列表。通过使用 pprint() 函数,可以保持数据结构的清晰层次,让数据更易于阅读和理解。

基础

基本用法

你可以使用 pprint() 函数来打印任何 Python 数据结构。下面是一个简单例子:

import pprint

data = {
    "nested_dict": {"id": 1, "name": "John", "tags": ["python", "coding", "tutorial"]},
    "list_of_tuples": [(1, "a"), (2, "b"), (3, "c")],
}

pprint.pprint(data)
# 输出:
# {'list_of_tuples': [(1, 'a'), (2, 'b'), (3, 'c')],
#  'nested_dict': {'id': 1,
#                  'name': 'John',
#                  'tags': ['python', 'coding', 'tutorial']}}

控制打印样式

pprint 提供了多个参数,使你可以控制输出的样式和宽度。

  • width 参数用于确定输出每行的字符数。
  • indent 参数用于定义每级嵌套的缩进数。
  • depth 参数用于限制打印数据结构的嵌套层数。
large_dict = {'key{}'.format(i): 'value{}'.format(i) for i in range(10)}
pprint.pprint(large_dict, width=30, indent=4)

比较 pprint()print()

通常,print() 函数无法很好地处理嵌套结构或多行数据。如果你尝试使用 print() 打印复杂的数据结构,你会得到一行很长、很难阅读的输出。而 pprint() 则会更智能地分行,按层级结构对数据进行整齐地排列。

进阶

使用 PrettyPrinter 类

如果你想反复使用某个特定的打印风格,你可以创建一个 PrettyPrinter 的实例,并调用其 pprint() 方法。

pp = pprint.PrettyPrinter(indent=4, width=40, depth=2)
pp.pprint(data)

这将创建一个可以在你的代码中反复使用的对象,使得任何时候你需要的打印风格都是一致的。

PrettyPrinter 类

PrettyPrinter 类是 pprint 模块的核心,通过实例化这个类,你可以更灵活地控制格式化输出。PrettyPrinter 提供了多个方法和功能,其中最常用的是:

  • pprint():输出美化过的数据结构。
  • pformat():返回一个字符串,该字符串是数据结构的美化过的表示。

它还有多个参数用以控制输出的打印样式:

  • width: 设置输出的每行的字符数。
  • indent: 设置嵌套层的缩进数。
  • depth: 限制打印数据的嵌套层数。
  • compact: 减少由于大量数据嵌套造成的高度使用,一定程度上牺牲了可读性以减少占用空间。
  • sort_dicts: 在 Python 3.8 中引入,它是一个布尔标志,用于指定是否对字典类型的键进行排序,以便以一致的顺序打印。默认情况下为 True。

pformat 函数

有时你可能想获取格式化字符串而不是直接打印它。在这种情况下,可以使用 pformat() 函数。它接受与 pprint() 相同的参数,但它会返回格式化的字符串而不是直接打印出来。

formatted_str = pprint.pformat(data, width=50, indent=2)
print(formatted_str)

自定义 PrettyPrinter

如果你需要定制打印机制,你可以通过继承 PrettyPrinter 类并覆盖 _format() 方法来实现。

class MyPrettyPrinter(pprint.PrettyPrinter):
    def format(self, object, context, maxlevels, level):
        if isinstance(object, MyCustomType):
            return (f"MyCustomRepr({object})", True, False)
        return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值