在 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)