При интерактивной работе с python иногда необходимо отобразить результат, представляющий собой произвольно сложную структуру данных (например, списки со встроенными списками и т. д.). По умолчанию они отображаются в виде одного массивного линейного дампа, который просто повторяется снова и снова, и вы должны внимательно его проанализировать, чтобы прочитать его.
Есть ли что-то, что возьмет любой объект Python и отобразит его более рациональным образом. например
[0, 1,
[a, b, c],
2, 3, 4]
вместо:
[0, 1, [a, b, c], 2, 3, 4]
Я знаю, что это не очень хороший пример, но думаю, вы уловили идею.






from pprint import pprint
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
pprint(a)
Обратите внимание, что для такого короткого списка, как мой пример, pprint фактически напечатает все в одной строке. Однако для более сложных структур он довольно хорошо справляется с хорошей печатью данных.
Другой хороший вариант - использовать IPython, интерактивную среду с множеством дополнительных функций, включая автоматическую красивую печать, завершение методов с помощью табуляции, простой доступ к оболочке и многое другое. Его также очень легко установить.
Ну, также можете импортировать оболочку ipython в свою программу. Я указываю на ipython, потому что он имеет много других полезных функций, помимо красивой печати.
Иногда для этого может пригодиться YAML.
import yaml
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
print yaml.dump(a)
Производит:
- 0
- 1
- [a, b, c]
- 2
- 3
- 4
В дополнение к pprint.pprint, pprint.pformat действительно полезен для создания читаемых __repr__. Мои сложные __repr__ обычно выглядят так:
def __repr__(self):
from pprint import pformat
return "<ClassName %s>" % pformat({"attrs":self.attrs,
"that_i":self.that_i,
"care_about":self.care_about})
pprint (x) - это просто «print pformat (x)», поэтому вы можете получить доступ к тому, что pprint распечатывает в виде строки. иногда очень полезно
Для записи, я считаю, что IPython использует pprint для печати, поэтому, если вы хотите печатать такие вещи, как IPython, в своей собственной программе, вам нужен pprint.