Chcel by som vedieť, či existuje lepší spôsob, ako vypísať všetky objekty v zozname Pythonu, ako je tento :
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Čítal som, že tento spôsob nie je úplne dobrý :
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
Nie je'tam niečo ako :
print(p) for p in myList
Ak nie, moja otázka znie... prečo ? Ak môžeme takéto veci robiť s obsiahlymi zoznamami, prečo nie ako jednoduchý príkaz mimo zoznamu ?
Predpokladáme, že používate Python 3.x:
print(*myList, sep='\n')
Rovnaké správanie môžete dosiahnuť aj v Pythone 2.x pomocou from __future__ import print_function
, ako poznamenal mgilson v komentároch.
Pri príkaze print v Pythone 2.x budete potrebovať nejakú iteráciu, čo sa týka vašej otázky o nefunkčnosti príkazu print(p) for p in myList
, môžete použiť nasledujúci príkaz, ktorý robí to isté a je stále jednoriadkový:
for p in myList: print p
Pre riešenie, ktoré používa '\n'.join()
, uprednostňujem zoznamy a generátory pred map()
, takže by som asi použil nasledujúce:
print '\n'.join(str(p) for p in myList)
Pre Python 2.*:
Ak pre svoju triedu Person preťažíte funkciu __str__(), môžete vynechať časť s map(str, ...). Ďalším spôsobom je vytvorenie funkcie, tak ako ste napísali:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
V jazyku Python 3.* je pre funkciu print() argument sep. Pozrite si dokumentáciu.