python pprint模块中print()和pprint()两者的区别

1. 简介

在Python中,有不同的方式打印输出数据。其中,print()是最常见的方法之一。然而,对于打印结构化数据,如字典和列表等,print()并不能直观展示。这使得阅读输出数据非常困难。因此,Python标准库中提供了pprint模块,其中包含print()函数的变种pprint(),可以更好地打印输出支持嵌套结构和拥有复杂数据结构的对象。

2. print()函数

print()函数是Python内置函数之一,可以将对象以文本形式打印输出。当我们没有指定打印格式时,Python默认调用的是print()函数。例如,下面是一个简单的例子,我们对一个Python列表进行打印:

my_list = [1,2,3,4]

print(my_list)

在Python 3.x中,print()是一个函数而不是语法结构,应该总是使用括号。

输出结果如下:

[1, 2, 3, 4]

我们可以看到结果是一个列表,它的内部元素直接排列成一行,并没有多余的空格或换行符。当数据结构变得更加复杂时,它就会变得难以阅读和解释,这时候pprint()函数就会显得非常有用。

3. pprint()函数

pprint()函数在pprint模块中定义,可以更好地打印嵌套数据结构,提高输出结果的可读性。它打印的输出结果很适合在调试和数据探索时使用。

pprint()函数的用法非常简单。我们需要导入pprint模块,然后调用pprint()函数并将要打印的对象作为参数传递给它。例如,以下代码演示了如何使用pprint()函数来打印一个嵌套字典:

import pprint

my_dict = {'name': 'John', 'age': 23, 'address': {'street': 'Main St', 'city': 'New York', 'zip': '10001'}}

pprint.pprint(my_dict)

输出结果如下:

{'address': {'city': 'New York', 'street': 'Main St', 'zip': '10001'},

'age': 23,

'name': 'John'}

从输出结果来看,键-值对的顺序不同于之前的例子。这是因为pprint()函数按照字典的哈希值顺序来打印键-值对。

3.1 指定缩进量

当我们打印较大的嵌套数据结构时,pprint()默认的缩进量可能不足以让结果易于阅读。可以通过indent参数来指定缩进量。例如,以下代码展示了如何使用indent参数来指定缩进量为4:

import pprint

my_dict = {'name': 'John', 'age': 23, 'address': {'street': 'Main St', 'city': 'New York', 'zip': '10001'}}

pprint.pprint(my_dict, indent=4)

输出结果如下:

{   'address': {   'city': 'New York',

'street': 'Main St',

'zip': '10001'},

'age': 23,

'name': 'John'}

可以看到,每个键-值对现在都缩进了4格,使得打印结果更加易于阅读。

3.2 限制打印输出长度

如果我们试图打印一个非常大的数据结构,pprint()打印的输出结果可能会非常长,甚至可能超过Python的默认输出限制(在Python 3.x中,这个限制是超过80个字符)。我们可以使用width参数来限制打印输出的长度。例如,以下代码演示了如何使用width参数来限制打印的结果在60个字符以内:

import pprint

my_list = [i for i in range(100)]

pprint.pprint(my_list, width=60)

输出结果如下:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,

16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,

30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,

44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,

58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,

72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,

86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

可以看到,输出结果现在已经被限制在了60个字符以内。这使得输出结果更容易阅读和解释。

3.3 禁用排序

在默认情况下,pprint()函数会根据每个键的哈希值来对字典中的键-值对进行升序排序。这有助于使输出结果更直观,但有时候也可能会降低可读性。我们可以使用sort_dicts参数来控制是否对字典进行排序。例如,以下代码演示了如何使用sort_dicts参数来禁用排序:

import pprint

my_dict = {'name': 'John', 'age': 23, 'address': {'street': 'Main St', 'city': 'New York', 'zip': '10001'}}

pprint.pprint(my_dict, sort_dicts=False)

输出结果如下:

{'name': 'John',

'age': 23,

'address': {'street': 'Main St', 'city': 'New York', 'zip': '10001'}}

可以看到,输出结果现在不再有序。

4. 结论

print()函数对于展示非常简单的数据结构是非常便利的。但是,对于嵌套结构和复杂对象来说,print()的输出结果常常变得难以阅读和理解。pprint()函数能够更好地展示这些数据结构,并提高输出结果的可读性,使它们更适合在调试和数据探索时使用。

此外,pprint()函数还有一些非常有用的可选参数,例如指定缩进量、限制打印输出长度和禁用排序等。这些参数有助于我们控制输出结果的形式,并使得我们更容易理解打印的数据结构。

后端开发标签