Thema: Woher kommt das NONE? (erledigt!)

02.07.16 16:40 #1

Nachbar

Registriert seit: 13.06.2016

Beiträge: 10

-

Hallo zusammen,

ich stehe auf dem Schlauch, was die Ausgabe des folgenden Codes anbelangt:

Quellcode ausblenden Python-Code
def histo(l):
   for i in range(len(l)):
      print(l[i] * "*")

e = 2,5,4
print(histo(e))


Die Ausgabe ist:

Zitat:

**
*****
****
None


Kann mir jemand erklären, wo das "None" herkommt? Eigentlich sollten doch nur 3 zeilen mit der jeweiligen Anzahl an Sternen gedruckt werden aber irgendwas passiert scheinbar danach noch?!

03.07.16 16:56 #2

eulerscheZhl

Registriert seit: 21.11.2014

Beiträge: 14

-

print(histo(e)) gibt aus, was die Funktion zurückgibt. Dort gibt es aber keinen Returnwert. Daher das None.

05.07.16 21:39 #3

Nachbar

Registriert seit: 13.06.2016

Beiträge: 10

-

Danke soweit. Aber in dieser Funktion ist ein 'return' drin und trotzdem kriege ich None zurück:

Quellcode ausblenden Python-Code
def ggt(x,y)
r = x % y
if r == 0:
    return y
else:
    ggt(y,r)  

print ggt(15, 10)


Wenn ich wiederum in der Funktion 'return' durch 'print' ersetze und dann die Funktion aufrufe, wird der richtige Wert ausgegeben. Ich verstehe es nicht...

06.07.16 15:20 #4

eulerscheZhl

Registriert seit: 21.11.2014

Beiträge: 14

-

Im else Pfad steht kein return.

06.07.16 22:38 #5

Nachbar

Registriert seit: 13.06.2016

Beiträge: 10

-

Okay also vermute ich mal, dass in jedem vorhandenen Statement (in diesem Fall in 'if' und 'else') ein return stehen muss, zumindest wenn man einen Rückgabewert für irgendetwas braucht...

07.07.16 08:58 #6

eulerscheZhl

Registriert seit: 21.11.2014

Beiträge: 14

-

Ja. Woher soll python sonst wissen, dass du das Ergebnis noch verwenden willst?

07.07.16 10:19 #7

Nachbar

Registriert seit: 13.06.2016

Beiträge: 10

-

Naja solche Überlegungen sind einem Anfänger noch nicht so klar. Jedenfalls habe ich gelernt, dass "print" nur einmalig einen Wert an den Benutzer zurückliefert aber "return" einen Wert an das Programm, das mit diesem Wert dann weiter arbeiten kann (falls benötigt).

1817401

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.

17ms