22

默认情况下,如何在 REPL 上启用漂亮的打印?

目前我通过使用pprint.pprint()函数来做到这一点。

>>> pprint.pprint(data)
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0,
 'THUMBNAIL': ''}

但我想默认打印漂亮

>>> data
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0,
 'THUMBNAIL': ''}

我尝试了什么?
我在谷歌上搜索。没有发现任何大多数结果指向pprint模块

4

3 回答 3

25

使用sys.displayhook

import pprint
import sys

orig_displayhook = sys.displayhook

def myhook(value):
    if value != None:
        __builtins__._ = value
        pprint.pprint(value)

__builtins__.pprint_on = lambda: setattr(sys, 'displayhook', myhook)
__builtins__.pprint_off = lambda: setattr(sys, 'displayhook', orig_displayhook)

如果您不想在每次运行交互式 shell 时都键入上面的代码,请将上面的代码放入PYTHONSTARTUP 。

用法:

>>> data = dict.fromkeys(range(10))
>>> data
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>> pprint_on()
>>> data
{0: None,
 1: None,
 2: None,
 3: None,
 4: None,
 5: None,
 6: None,
 7: None,
 8: None,
 9: None}
>>> pprint_off()
>>> data
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
于 2013-06-22T07:37:38.883 回答
11

使用IPython外壳:

In [10]: data = {'SHIP_CATEGORY': '',  'SHIP_QUANTITY': 1, 'SHIP_SEPARATELY': 0, 'SHIP_SUPPLEMENT': 0, 'SHIP_SUPPLEMENT_ONCE': 0,}

In [11]: data
Out[11]: 
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0}

--no-pprint如果您想禁用这种漂亮的打印,它还有一个选项。

IPythonshell还具有tab补全、多行粘贴、运行shell命令等功能。因此,它比普通的python shell要好得多。

于 2013-06-22T07:34:20.040 回答
3

基于falsetru接受的答案,但以单线的形式:

from pprint import pprint
import sys

sys.displayhook = lambda x: exec(['_=x; pprint(x)','pass'][x is None])

并切换回来(基于 kyrill 的评论):

sys.displayhook = sys.__displayhook__
于 2019-06-23T16:29:55.230 回答