Unerwartete Leerzeichen

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.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Sonntag 17. April 2011, 22:49

BlackJack hat geschrieben:Ich verstehe nicht wieso die Leerzeichen nicht gewollt sein sollen?
Nun ja, ich kann mir durchaus Fälle vorstellen, in denen es gewollt ist, dass direkt am Vorgängerelement 'weitergeprintet' wird.
Aber wie so oft: Ist wohl Ansichtssache. Ich jedenfalls finde es nicht ganz richtig, wenn ich eine Liste ohne Leerzeichen übergebe und einen String mit Leerzeichen zurückbekomme. Auch wenn das in 90 % der Fälle vielleicht so gewollt ist.

Bleibt für mich die Erkenntnis, dass 'print' als Funktion irgendwie 'ehrlicher' ist...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

Sonntag 17. April 2011, 23:19

@mutetella: Ich verstehe Deine Argumentation echt überhaupt nicht. Wenn in 90% der Fälle ein Leerzeichen gewollt ist, hättest Du trotzdem lieber eine Anweisung gehabt die nur in 10% der Fälle benutzbar ist!? Wie sinnlos ist *das* denn?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Montag 18. April 2011, 06:45

mutetella hat geschrieben:
BlackJack hat geschrieben:Ich verstehe nicht wieso die Leerzeichen nicht gewollt sein sollen?
Nun ja, ich kann mir durchaus Fälle vorstellen, in denen es gewollt ist, dass direkt am Vorgängerelement 'weitergeprintet' wird.
Aber wie so oft: Ist wohl Ansichtssache. Ich jedenfalls finde es nicht ganz richtig, wenn ich eine Liste ohne Leerzeichen übergebe und einen String mit Leerzeichen zurückbekomme.
Nein, du übergibt eine Auflistung mit Kommata. Eigentlich müsstest du dich wundern, dass die Kommas nicht mit ausgegeben werden. Ist schließlich ein Tupel. Keine Leerzeichen ist genauso willkürlich wie die Verwendung von Leerzeichen.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Montag 18. April 2011, 09:48

@BlackJack:
Es geht nicht darum, was ich will oder nicht. Es ist nur so, dass ich gerade auch hier in diesem Forum immer wieder darauf hingewiesen wurde, wenn eine Funktion zu viel, ich nenne es mal 'Eigendynamik', entwickelt. Und sollte etwas sowohl so wie auch anderst gelöst werden können, sollte die Entscheidung darüber nicht fest in die Funktion implementiert sein.
Ich weiß nicht, in welche Richtung diese Diskussion gehen würde, wenn sich der Entwickler von 'print' dafür entschieden hätte, zwischen einzelne Elemente kein Leerzeichen einzufügen.
Darii hat geschrieben:Eigentlich müsstest du dich wundern, dass die Kommas nicht mit ausgegeben werden. Ist schließlich ein Tupel. Keine Leerzeichen ist genauso willkürlich wie die Verwendung von Leerzeichen.
Die Kommas separieren die einzelnen Elemente des Tuples. Somit haben die mit einer möglichen Ausgabe überhaupt nichts zu tun. Eben genauso wenig, wie ein Leerzeichen. Sowohl das eine wie das andere finde ich willkürlich. An das Leerzeichen haben wir uns allenfalls gewohnt, deshalb 'erwarten' wir es vielleicht.

Aber letztlich geht es mir gar nicht so sehr darum, wie 'print' arbeitet. Lässt sich eh' nicht mehr ändern und ist ab python3 sowieso in meinem Sinne geändert... :wink:

Mit geht es vielmehr darum, wie weit eine Funktion etc. 'mitdenken' soll oder darf. Nur so weit, wie es in jedem Fall Sinn macht oder auch so weit, wie es in vielen Fällen Sinn macht ...?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

Montag 18. April 2011, 10:00

``print`` ist in Python 2.x keine Funktion! Damit gelten dafür auch nicht einfach so Entwurfskriterien für Funktionssignaturen. Ich würde auch nicht sagen, dass die Kommata die Elemente eines Tupels trennen -- das ist komplett eigene Syntax. Denn bei einem Tupel kann man nicht etwas nach dem Muster ``>>object`` als erstes Element schreiben und ein Komma nach dem letzten Element macht bei einem Tupel keinen Unterschied, bei ``print`` schon.

Eine Funktion sollte soviel "mitdenken" wie es in den meisten Fällen Sinn macht, sprich es sollten sinnvolle Defaultwerte verwendet werden. Macht die `print()`-Funktion ja auch.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Montag 18. April 2011, 10:10

@BlackJack:
Wenn ich Dich richtig verstehe, erfolgt die Parameterübergabe an eine Anweisung anders als an eine Funktion. Die Funktion

Code: Alles auswählen

print (1,2,3)
erhält ein Tuple. In welcher Form werden die 1, die 2 und die 3 von print (oder einer anderen Anweisung) entgegengenommen?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 5535
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 18. April 2011, 10:21

Ich glaube, man sollte hier "Sinn machen" eher in "magisch" ändern. Und hier könnte das ``print``-Statement manch einem durchaus etwas zu magisch und unflexibel vorkommen. Ich sage mal, das Statement holt im Sinne der "Convenience" (Zweckmäßigkeit) noch das Beste raus, was man aus einer "Nicht-Funktion" herausholen kann. Es hat aber auch sicher nicht geschadet, es in eine Funktion zu ändern. Andererseits könnten jetzt manche Leute von den Klammern genervt sein. Schön wäre vielleicht auch ein Mittelweg gewesen, wo man die ``print()``-Funktion unter einem anderen Namen eingeführt hätte und die Verwendung von ``print`` als Statement einfach die Funktion mit ihren Default-Werten aufgerufen hätte. Naja, aber klugscheissen kann man am Ende immer. Andere Leute hätten vielleicht auch *das* wieder "too much" gefunden.
shcol (Repo | Doc | PyPi)
Benutzeravatar
snafu
User
Beiträge: 5535
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 18. April 2011, 10:26

@mutella:

Statements gehören zum fest in den Interpreter eingebauten Befehlssatz. Da gibt es so gesehen kein festes Muster. Man kann nicht sagen, dass die Syntax von ``print``, ``try...except``, ``with`` usw grundsätzlich die selbe ist.
mutetella hat geschrieben:Ich weiß nicht, in welche Richtung diese Diskussion gehen würde, wenn sich der Entwickler von 'print' dafür entschieden hätte, zwischen einzelne Elemente kein Leerzeichen einzufügen.
Das hätte man wahrscheinlich für relativ unnötig gehalten, da dies bereit mittels ``print value1 + value2`` oder eben ``print ''.join(values)`` erledigt werden kann. Ich verstehe erhlich gesagt nicht, wie man sich dermaen daran aufhängen kann. Es ist ja nicht so, dass ``print`` als Statement total willkürlich handlen würde. Es ist einfach nur eine ungewöhnliche Syntax. Zu viel "Eigendynamik" herrscht da keineswegs.
shcol (Repo | Doc | PyPi)
BlackJack

Montag 18. April 2011, 11:08

@mutella: An die ``print``-Anweisung wird gar nichts übergeben -- es ist keine Funktion. CPython erzeugt da direkt entsprechenden Bytecode draus:

Code: Alles auswählen

In [320]: def f():
   .....:     print 1, 2, 3
   .....:     print_(1, 2, 3)
   .....: 

In [321]: dis.dis(f)
  2           0 LOAD_CONST               1 (1)
              3 PRINT_ITEM          
              4 LOAD_CONST               2 (2)
              7 PRINT_ITEM          
              8 LOAD_CONST               3 (3)
             11 PRINT_ITEM          
             12 PRINT_NEWLINE       

  3          13 LOAD_GLOBAL              0 (print_)
             16 LOAD_CONST               1 (1)
             19 LOAD_CONST               2 (2)
             22 LOAD_CONST               3 (3)
             25 CALL_FUNCTION            3
             28 POP_TOP             
             29 LOAD_CONST               0 (None)
             32 RETURN_VALUE
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Montag 18. April 2011, 13:38

snafu hat geschrieben:Ich verstehe erhlich gesagt nicht, wie man sich dermaen daran aufhängen kann.
Nun ja, wenn Dein Erfahrungsschatz so mickrig wäre wie der meinige, könntest Du mich vielleicht verstehen. Mein 'herumreiten' auf Dingen, die für Dich kaum noch einen Gedanken Wert sind, ist dem geschuldet, dass ich eben diese Dinge soweit als mir möglich verstehen will. Und nachdem ich über keinerlei Informatik-Ausbildung oder ähnlichen background verfüge, grottenschlecht in Englisch und Mathematik bin, braucht es einfach immer etwas länger, bis bei mir etwas 'durch' ist... :)

Und gerade solch' vermeintlich unwichtigen Dinge wie die Arbeitsweise von 'print' finde ich hochinteressant... :wink:

@BlackJack:
Das dis-Modul ist ja 'ne coole Sache! Damit werd' ich wieder eine ganze Weile meine Freude haben...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten