Seite 1 von 1
Unterschiedliche Ausgabe bei "print"
Verfasst: Mittwoch 11. Oktober 2006, 09:24
von Blattlaus
Man verzeihe mir den wenig Aussagekräftigen Tital, aber irgendwie wollte mir partou nichts besseres einfallen
Ich habe hier 2 Codeschnipsel, die sich bis auf einer Komma nicht unterscheiden:
Code: Alles auswählen
>>> f = file("C:\\\test.txt")
>>> lines = f.readlines()
>>> for line in lines:
... print line
...
Zeile 1
Zeile 2
Zeile 3
Zeile 4
Code: Alles auswählen
>>> f = file("C:\\\test.txt")
>>> lines = f.readlines()
>>> for line in lines:
... print line,
...
Zeile 1
Zeile 2
Zeile 3
Zeile 4
So weit so gut, das Komma bewirkt also, das keine zusätzliche Leerzeile ausgegeben wird. Da ich allerdings ein wissbegieriger Mensch bin und mit der Tatsache "das es so ist" nicht leben will, möchte ich wissen: Warum?
Was
genau bewirkt das Komma?
Verfasst: Mittwoch 11. Oktober 2006, 09:34
von birkenfeld
Dass print am Ende kein "\n" ausgibt. Das hängt nämlich schon an "line" dran.
Verfasst: Mittwoch 11. Oktober 2006, 09:36
von C4S3
Hi Blattlaus,
ich würde dir lieber eine richtige Antwort geben, da ich das Verweisen auf Docs und Tuts eigentlich eher ablehne. Leider kannte ich die Antwort selber nicht und musste suchen. Hatte noch keine Zeit, es selbst durch zu lesen, aber hier wirst du fündig:
http://docs.python.org/ref/print.html
mfg
EDIT: uups, zu langsam.
Verfasst: Mittwoch 11. Oktober 2006, 09:54
von Blattlaus
Das sagt die Doku:
A "\n" character is written at the end, unless the print statement ends with a comma.
Gut...soweit war ich ja auch schon. Aber der spezifische Grund dafür fehlt mir immernoch

Verfasst: Mittwoch 11. Oktober 2006, 10:25
von BlackJack
Welchen Grund willst Du denn wissen? Das Komma kann halt benutzt werden um ein von ``print`` automatisch generiertes '\n' zu unterdrücken. Das kann sehr praktisch sein, wenn man auf der gleichen Zeile später noch etwas ausgeben möchte.
Verfasst: Mittwoch 11. Oktober 2006, 14:13
von Y0Gi
Wenn du den Grund *für* den standardmäßigen Linefeed wissen möchtest: Ich vermute, weil man bei print einfach insgesamt öfter ein \n möchte als nicht und kann so etwa gegenüber Perl einiges an "Code" sparen, was das ganze wiederum übersichtlicher und leichter verständlich macht - und das ist ja eine der Stärken von Python.
Verfasst: Mittwoch 11. Oktober 2006, 15:43
von Leonidas
Blattlaus hat geschrieben:Gut...soweit war ich ja auch schon. Aber der spezifische Grund dafür fehlt mir immernoch

VIelleicht damit man sowas machen kann:
Um ehrlich zu sein, finde ich diese Komma-Syntax auch etwas strange und sehe sie eher als Altlast an. Daher nutzte ich lieber String-Formatter.
Verfasst: Mittwoch 11. Oktober 2006, 17:49
von Y0Gi
Für's Entwickeln (auch auf der interaktiven Konsole) finde ich es sehr praktisch, aber im fertigen Produkt macht die %-Syntax in der Tat mehr her und ist auch lesbarer.
Leonidas: In deinem Beispiel kannst du dir sogar das Leerzeichen nach "Hallo," sparen, denn das wird auch automatisch gesetzt - ebenso wie das nach Variablen, also in diesem Fall kommt eines vor dem "!" dazu.
Verfasst: Mittwoch 11. Oktober 2006, 18:44
von Leonidas
Y0Gi hat geschrieben:Leonidas: In deinem Beispiel kannst du dir sogar das Leerzeichen nach "Hallo," sparen, denn das wird auch automatisch gesetzt - ebenso wie das nach Variablen, also in diesem Fall kommt eines vor dem "!" dazu.
Wobei ich das Verhalten da Leerzeichen einzufügen persönlich eher als störend empfinde (Explicit is better than implicit).