Re: pbm-Flagge
Verfasst: Samstag 19. März 2011, 19:57
@Meishere: Weil ohne das ``print`` eben nicht mehr der "Datenmüll" ausgegeben wird. Die Rückgabewerte von den Funktionen haben doch nichts in den PBM-Daten zu suchen. Du nimmst ja nicht die ``print``\s weg, welche die 0en und 1en ausgeben.
Das was hinter ``print`` steht wird ausgewertet und dann ausgegeben. Literale wie Zahlen oder Zeichenketten werden zu sich selbst ausgewertet; Operatoren wie ``+``, ``*``, usw. werden angewendet und das Ganze wird zu einem Ergebnis ausgewertet; und Funktionen werden ausgeführt und durch ihren Rückgabewert ersetzt. Wenn eine Funktion nichts explizit mit einer ``return``-Anweisung zurück gibt, dann ist ihr Rückgabewert `None`. Du kannst Dir also vorstellen, dass am Ende jeder Funktion ein ``return None`` steht. Vielleicht hilft ja diese kleine Sitzung beim Verständnis:
Bei [18] wird einfach nur die 42 ausgegeben. Bei [19] wird der Ausdruck ausgewertet. Bei [20] wird die `sqrt()`-Funktion mit 25 aufgerufen und die gibt die Quadratwurzel (`sqrt` steht für "square root") zurück und die wird dann von ``print`` ausgegeben.
Bei [21] wird eine Funktion definiert die `n` Sternchen mit ``print`` ausgibt. Wenn man diese Funktion aufruft, tut sie das wie man bei [22] sieht, auch. Und bei [23] ist dann das was Du gemacht hast: Es wird die Funktion aufgerufen; die gibt mit ``print`` 10 Sternchen aus; und *dann* wird durch das ``print`` vor dem Aufruf der implizite Rückgabewert von dem Funktionsaufruf ausgegeben. Und das ist halt in diesem wie auch in Deinem Fall unsinnig.
Das was hinter ``print`` steht wird ausgewertet und dann ausgegeben. Literale wie Zahlen oder Zeichenketten werden zu sich selbst ausgewertet; Operatoren wie ``+``, ``*``, usw. werden angewendet und das Ganze wird zu einem Ergebnis ausgewertet; und Funktionen werden ausgeführt und durch ihren Rückgabewert ersetzt. Wenn eine Funktion nichts explizit mit einer ``return``-Anweisung zurück gibt, dann ist ihr Rückgabewert `None`. Du kannst Dir also vorstellen, dass am Ende jeder Funktion ein ``return None`` steht. Vielleicht hilft ja diese kleine Sitzung beim Verständnis:
Code: Alles auswählen
In [18]: print 42
42
In [19]: print 42 * 23
966
In [20]: print math.sqrt(25)
5.0
In [21]: def f(n):
....: print '*' * n
....:
In [22]: f(10)
**********
In [23]: print f(10)
**********
None
Bei [21] wird eine Funktion definiert die `n` Sternchen mit ``print`` ausgibt. Wenn man diese Funktion aufruft, tut sie das wie man bei [22] sieht, auch. Und bei [23] ist dann das was Du gemacht hast: Es wird die Funktion aufgerufen; die gibt mit ``print`` 10 Sternchen aus; und *dann* wird durch das ``print`` vor dem Aufruf der implizite Rückgabewert von dem Funktionsaufruf ausgegeben. Und das ist halt in diesem wie auch in Deinem Fall unsinnig.