Funktion gibt Keiner ohne return-Anweisung
Habe ich gerade gelernt (Lerne) wie die Funktion Parameter funktionieren in Python, und ich begann zu Experimentieren mit es ohne ersichtlichen Grund, wenn diese:
def jiskya(x, y):
if x > y:
print y
else:
print x
print(jiskya(2, 3))
gab die Ausgabe:
>>>
2
None
Wo haben die None
kommen? Und was ist es?
InformationsquelleAutor Grant | 2011-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist der return-Wert der Funktion, die Sie ausdrucken können. Wenn keine return-Anweisung (oder einfach ein
return
, ohne ein argument), eine implizitereturn None
wird Hinzugefügt, um das Ende einer Funktion.Werden Sie wahrscheinlich wollen, um die Rückkehr der Werte in der Funktion statt Sie zu drucken:
return None
Hinzugefügt"?Ich konnte keine Erklärung im die Python-Referenz, aber hier ist der Kommentar (und den code) hinzufügen der
return None
in cpython.InformationsquelleAutor phihag
Ok, um zu beginnen, wenn Sie dies tun:
Du immer etwas, das ziemlich viel ist, entspricht dies:
Also, was ist Los? Die
print(2)
ausgedruckt 2, und zurückNone
Druck durch die äußere nennen. Einfach genug.Nun schau mal hier:
Wenn Sie:
Erhalten Sie 2, weil, wenn Sie drucken Sie eine Funktion, die Sie auch immer bekommen die
return
Wert ist. (Diereturn
Wert ist gekennzeichnet durch denreturn someVariable
.Nun, auch wenn
print
nicht haben Klammern wie die meisten Funktionen, es ist eine Funktion, die einfach etwas besonderes in dieser Hinsicht. Was macht drucken zurück? Nichts. Also, wenn Sieprint print someVariable
erhalten SieNone
als der zweite Teil, weil der Rückgabewert von print istNone
.So wie die anderen gesagt haben:
Sollte neu geschrieben werden:
InformationsquelleAutor Dair
Die Funktion.
Es ist, was die Funktion zurückgegeben.
In Python, jede Funktion etwas zurückgibt. Es könnte "mehrere Dinge", mit der ein Tupel, oder es könnte "nichts" mit
None
, aber es muss etwas zurückgeben. Dies ist, wie wir mit der Tatsache auseinandersetzen, dass es keine Möglichkeit zu geben, einen Rückgabetyp (das würde keinen Sinn machen, da Sie nicht angeben, welche Arten für irgendetwas anderes). Wenn Sie interpretiert wird als Zeichenfolge für den Druck, dieNone
ersetzt wird, die mit der Zeichenkette "None".None
ist ein spezielles Objekt, das darstellen soll, das fehlen einer echten Sache. Seine Art istNoneType
(es ist eine Instanz der Klasse). Wenn Sie nicht explizit, alles zurückzugeben, was Sie implizit zurück Keine.Schrieb Sie die Funktion drucken Sie einen der beiden Werte
x
odery
, aber nicht, um etwas zurückzugeben. SoNone
zurückgegeben wurde. Dann fragte Sie Python zu drucken, das Ergebnis des Aufrufs der Funktion. So ist es als die Funktion (Ausdruck einer der Werte), dann drucken die return-Wert, der warNone
als text "Keine".InformationsquelleAutor Karl Knechtel - away from home
Ya, im Grunde sind Sie mit der print-Anweisung in Ihrer Funktion als ein Weg, um Informationen zurück. Sie sollten das nicht tun. Print ist NICHT das gleiche wie eine return-Anweisung. Wenn Sie wollen einfach nur Ihre Funktion zu geben, Ihre Antwort, ohne die keines ist, geben Sie einfach jiskya(2, 3) statt. Sie werden sehen, was die Funktion löst aus, weil Sie die print-Anweisung in der Funktion. Wenn Sie stattdessen tippte "return" in deiner Funktion würde es nicht geben Ihnen nichts, ohne die "print" vor dem Funktionsaufruf.
InformationsquelleAutor de1337ed
Das problem ist, Sie schrieb
print jiskya(2,3)
. Sie übergeben der Rückgabewert vonjiskya
zu denprint
Funktion.jiskya
selbst drucktx
odery
, das ist, warum Sie sehen, die 2. Aber dann dieprint
imprint jiskya(2, 3)
Anweisung selbst ausgeführt, mit keinem argument.Des übersetzers, dies ist eine Vereinfachung, was passiert:
InformationsquelleAutor Jared Ng
Du machst zwei Drucke, der erste, der in den Korpus Ihrer Funktion und der zweite druckt das Ergebnis der Funktion, die da eigentlich nichts.
Sollte man eher etwas wie das hier tun:
Dann,
InformationsquelleAutor Alexis Métaireau