Come altre risposte hanno già detto, pprintè un ottimo modulo che farà quello che vuoi. Tuttavia, se non vuoi importarlo e vuoi solo stampare l'output di debug durante lo sviluppo, puoi approssimarne l'output.
Alcune delle altre risposte funzionano bene per le stringhe, ma se le provi con un oggetto di classe ti darà l'errore TypeError: sequence item 0: expected string, instance found.
Per oggetti più complessi, assicurati che la classe abbia un __repr__metodo che stampa le informazioni sulla proprietà che desideri:
class Foo(object):
def __init__(self, bar):
self.bar = bar
def __repr__(self):
return "Foo - (%r)" % self.bar
E poi, quando vuoi stampare l'output, mappare semplicemente l'elenco alla strfunzione in questo modo:
l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)]
print "[%s]" % ",\n ".join(map(str,l))
uscite:
[Foo - (10),
Foo - (20),
Foo - ('A string'),
Foo - (2.4)]
Puoi anche fare cose come sovrascrivere il __repr__metodo dilist per ottenere una forma di bella stampa annidata:
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
dà
[first,
2,
[another,
list,
here],
last]
Purtroppo nessun rientro di secondo livello ma per un veloce debug può essere utile.