Unterschiedliche Ausgabe bei "print"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Mittwoch 11. Oktober 2006, 09:24

Man verzeihe mir den wenig Aussagekräftigen Tital, aber irgendwie wollte mir partou nichts besseres einfallen :o

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?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 11. Oktober 2006, 09:34

Dass print am Ende kein "\n" ausgibt. Das hängt nämlich schon an "line" dran.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Mittwoch 11. Oktober 2006, 09:36

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.
Gruß!
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Mittwoch 11. Oktober 2006, 09:54

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 :|
BlackJack

Mittwoch 11. Oktober 2006, 10:25

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.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 11. Oktober 2006, 14:13

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 11. Oktober 2006, 15:43

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:

Code: Alles auswählen

zahl = 20
print "Hallo, ", zahl, "!"
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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 11. Oktober 2006, 17:49

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 11. Oktober 2006, 18:44

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).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten