Как уже упоминалось в других ответах, pprint
- отличный модуль, который будет делать то, что вы хотите. Однако, если вы не хотите импортировать его и просто хотите напечатать вывод отладочной информации во время разработки, вы можете приблизить его вывод.
Некоторые другие ответы прекрасно работают со строками, но если вы попробуете их с объектом класса, это выдаст вам ошибку TypeError: sequence item 0: expected string, instance found
.
Для более сложных объектов убедитесь, что в классе есть метод __repr__
, который печатает необходимую информацию о свойствах:
class Foo(object):
def __init__(self, bar):
self.bar = bar
def __repr__(self):
return "Foo - (%r)" % self.bar
А затем, когда вы хотите напечатать вывод, просто сопоставьте ваш список с функцией str
, например:
l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)]
print "[%s]" % ",\n ".join(map(str,l))
выходы:
[Foo - (10),
Foo - (20),
Foo - ('A string'),
Foo - (2.4)]
Вы также можете сделать что-то вроде переопределения __repr__
метода list
, чтобы получить форму вложенной красивой печати:
class my_list(list):
def __repr__(self):
return "[%s]" % ",\n ".join(map(str, self))
a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"])
print a
дает
[first,
2,
[another,
list,
here],
last]
К сожалению, нет отступа второго уровня, но для быстрой отладки это может быть полезно.