Norėčiau sužinoti, ar yra geresnis būdas spausdinti visus "Python" sąrašo objektus nei šis:
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Aš perskaičiau, kad šis būdas nėra labai geras:
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
Ar ne'yra kažkas panašaus į :
print(p) for p in myList
Jei ne, mano klausimas... kodėl ? Jei tokius dalykus galime daryti su išsamiais sąrašais, kodėl ne kaip paprastą teiginį už sąrašo ribų ?
Darant prielaidą, kad naudojate Python 3.x:
print(*myList, sep='\n')
Tokią pačią elgseną galite pasiekti ir Python 2.x sistemoje, naudodami from __future__ import print_function
, kaip komentaruose pažymėjo mgilson.
Python 2.x sistemoje su print sakiniu jums reikės tam tikros iteracijos, o dėl jūsų klausimo apie print(p) for p in myList
neveikia, galite tiesiog naudoti toliau pateiktą sakinį, kuris daro tą patį ir yra vienos eilutės:
for p in myList: print p
Sprendimui, kuris naudoja '\n'.join()
, pirmenybę teikiu sąrašų supratimui ir generatoriams, o ne map()
, todėl tikriausiai naudočiau tokį sprendimą:
print '\n'.join(str(p) for p in myList)
Skirta "Python 2.*":
Jei perkraunate savo Person klasės funkciją __str__(), galite praleisti dalį su map(str, ...). Kitas būdas - sukurti funkciją, kaip ir jūs parašėte:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Python 3.* programoje yra argumentas sep, skirtas print() funkcijai. Pažvelkite į dokumentaciją.