Seite 2 von 2

Re: pbm-Flagge

Verfasst: Samstag 19. März 2011, 19:57
von BlackJack
@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:

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 [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.

Re: pbm-Flagge

Verfasst: Sonntag 20. März 2011, 11:56
von Meishere
Oh, danke, dass ihr euch so viel Mühe macht :D
So etwas ähnliches habe ich mir schon gedacht. Schließlich sieht man ja, wenn man das Python-Programm laufen lässt, dasss immer none mit ausgegeben wird.
Aber jetzt habe ich das ganze erst richtig verstanden. Da scheinen ein paar wichtige Grundkenntnisse an mir vorbeigegangen zu sein. Ohne meine Lehrerin schlecht mache zu wollen, liegt es wohl an ihr :(
Sie hat uns das ganze nur so halb erklärt. Wir haben als erstes Beispiel eine Funktion mit return gehabt und diese mit print aufgerufen, bei den anderen Funktionen (ohne return) haben wir es genauso gemacht und uns nciht daran gestört, dass "none" mit ausgegeben wurde.
Ich glaube unsere Lehrerin ist ein bisschen überfordert, da sie ja mehrere Programmiersprachen gleichzeitig unterrichten muss :mrgreen:

Naja. Danke nochmal. Das Forum ist echt hilfreich :)

Schöne Grüße