Подтвердить что ты не робот

Довольно печатать по умолчанию в Python REPL

Как включить стандартную печать по 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': ''}

Что я пробовал?
Я искал в Google. Не удалось найти ничего, что могло бы привести к результату pprint module

4b9b3361

Ответ 1

Используйте 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)

Поместите над кодом 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}

Ответ 2

Используйте IPython shell:

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, если вы хотите отключить эту симпатичную печать.

IPython shell также имеет функции, такие как табуляция, многострочная паста, запуск команд оболочки и т.д. Так что, чем обычная оболочка python.

Ответ 3

На основании принятого ответа фальсетру, но в виде однострочника:

from pprint import pprint
import sys

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

и переключиться обратно (на основе комментария kyrill):

sys.displayhook = sys.__displayhook__