Θα ήθελα να μάθω αν υπάρχει καλύτερος τρόπος να εκτυπώσω όλα τα αντικείμενα σε μια λίστα Python από αυτόν :
myList = [Person("Foo"), Person("Bar")]
print("\n".join(map(str, myList)))
Foo
Bar
Διαβάζω ότι αυτός ο τρόπος δεν είναι πραγματικά καλός :
myList = [Person("Foo"), Person("Bar")]
for p in myList:
print(p)
Δεν υπάρχει κάτι σαν :
print(p) for p in myList
Αν όχι, η ερώτησή μου είναι... γιατί; Αφού μπορούμε να κάνουμε τέτοιου είδους πράγματα με περιεκτικές λίστες, γιατί όχι ως απλή δήλωση εκτός λίστας ;
Υποθέτοντας ότι χρησιμοποιείτε Python 3.x:
print(*myList, sep='\n')
Μπορείτε να έχετε την ίδια συμπεριφορά στην Python 2.x χρησιμοποιώντας from __future__ import print_function
, όπως σημειώνει ο mgilson στα σχόλια.
Με την εντολή print στην Python 2.x θα χρειαστείτε κάποιου είδους επανάληψη, όσον αφορά την ερώτησή σας σχετικά με την print(p) for p in myList
που δεν λειτουργεί, μπορείτε απλά να χρησιμοποιήσετε το παρακάτω που κάνει το ίδιο πράγμα και είναι ακόμα μία γραμμή:
for p in myList: print p
Για μια λύση που χρησιμοποιεί την '\n'.join()
, προτιμώ την κατανόηση λίστας και τις γεννήτριες από την map()
οπότε θα χρησιμοποιούσα μάλλον το ακόλουθο:
print '\n'.join(str(p) for p in myList)
Το χρησιμοποιώ συνέχεια:
#!/usr/bin/python
l = [1,2,3,7]
print "".join([str(x) for x in l])
Για την Python 2.*:
Αν υπερφορτώσετε τη συνάρτηση __str__() για την κλάση Person, μπορείτε να παραλείψετε το μέρος με το map(str, ...). Ένας άλλος τρόπος για αυτό είναι η δημιουργία μιας συνάρτησης, όπως ακριβώς γράψατε:
def write_list(lst):
for item in lst:
print str(item)
...
write_list(MyList)
Υπάρχει στην Python 3.* το όρισμα sep για τη συνάρτηση print(). Ρίξτε μια ματιά στην τεκμηρίωση.