Rückkehr Rückkehr Keine, und keine Rückkehr überhaupt?
Drei Funktionen:
def my_func1():
print "Hello World"
return None
def my_func2():
print "Hello World"
return
def my_func3():
print "Hello World"
Scheinen Sie alle zurück Keine. Gibt es irgendwelche Unterschiede zwischen dem, wie der Rückgabewert dieser Funktionen sich Verhalten? Gibt es irgendwelche Gründe, um lieber eine gegenüber dem anderen?
- Beachten Sie, dass es einen stilistischen Unterschied.
return None
impliziert für mich, dass die Funktion manchmal hat eine nicht-None
Rückgabewert, sondern an der Lage desreturn None
gibt es keine solchen Rückgabewert. Schreiben keinereturn
überhaupt impliziert für mich gibt es niemals ein interessanter Wert zurückgeben, ein bisschen wie ein "Verfahren" als Gegensatz zu einer "Funktion".return
impliziert, dass die bestehenden früh von einem "Verfahren" gemäß dem vorherigen Punkt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf das tatsächliche Verhalten, gibt es keinen Unterschied. Sie alle zurück
None
- und das ist es. Jedoch, es gibt eine Zeit und Platz für alle.Die folgenden Anweisungen sind im Grunde wie die verschiedenen Methoden, die verwendet werden soll (oder zumindest, wie ich unterrichtet wurde, sollten Sie verwendet werden), aber Sie sind nicht absolute Regeln gibt, so kann man Sie mischen, wenn Sie das Gefühl notwendig.
Mit
return None
Dieser erzählt, dass die Funktion ist ja dafür gedacht, um einen Wert zurückzugeben, für die spätere Verwendung, und in diesem Fall gibt es
None
. Dieser WertNone
können dann anderweitig eingesetzt werden.return None
ist nie verwendet werden, wenn es keine anderen möglichen Rückgabewerte der Funktion.Im folgenden Beispiel gehen wir zurück
person
'smother
wenn dieperson
gegeben ist ein Mensch. Wenn es nicht ein von Menschen, die wir zurückNone
da dieperson
nichtmother
(nehmen wir an, es ist nicht ein Tier oder so).Mit
return
Dies ist für den gleichen Grund wie
break
in Schleifen. Der Rückgabewert egal ist und Sie nur wollen, um zu beenden die ganze Funktion. Es ist sehr nützlich in einigen Orten, auch wenn Sie es nicht brauchen, dass oft.Wir haben 15
prisoners
und wir wissen, einer von Ihnen hat ein Messer. Wir Durchlaufen jedeprisoner
eins nach dem anderen zu überprüfen, wenn Sie ein Messer. Wenn wir auf die person mit einem Messer, können wir einfach die Funktion beenden, weil wir wissen, es gibt nur ein Messer und keinen Grund, die überprüfung rest derprisoners
. Wenn wir nicht finden, dasprisoner
mit einem Messer, heben wir ein alert. Dies könnte getan werden, in viele verschiedene Arten und inreturn
ist wahrscheinlich auch nicht der beste Weg, aber es ist nur ein Beispiel, um zu zeigen, wiereturn
zum beenden einer Funktion.Hinweis: sollten Sie das nie tun
var = find_prisoner_with_knife()
, da der Rückgabewert ist nicht dazu gedacht zu sein gefangen.Mit keine
return
überhauptDieser wird auch zurück
None
, aber dieser Wert ist nicht gedacht, um verwendet werden oder abgefangen werden. Es bedeutet einfach, dass die Funktion erfolgreich beendet. Es ist im Grunde das gleiche wiereturn
imvoid
Funktionen in Sprachen wie C++ oder Java.Im folgenden Beispiel setzen wir person name der Mutter, und dann die Funktion beendet nach dem erfolgreichen Abschluss.
Hinweis: sollten Sie das nie tun
var = set_mother(my_person, my_mother)
, da der Rückgabewert ist nicht dazu gedacht zu sein gefangen.var = get_mother()
OK ist wenn Sie vorbei sindvar
zu anderen Funktionen, die Sie akzeptierenNone
- "nie" ist ein wenig übertriebenvar = get_mother()
können nicht verwendet werden? IMHO ist es völlig in Ordnung, das zu tun. Sie müssen nur vergewissern Sie sich, dass für eine nichtNone
Wert mitif var
bevor Sie es verwenden.Ja, Sie sind alle gleich.
Können wir überprüfen, interpretiert die Maschine code, um zu bestätigen, dass Sie alle machen genau dasselbe.
dis.dis
zurückNone
:-Xdis.dis
auch berichten einige Zeilennummern ...Sie jeder Rücksendung die gleiche singleton
None
-- Es gibt keinen funktionalen Unterschied.Denke ich, dass es einigermaßen idiomatisch zu verlassen aus der
return
Anweisung, wenn Sie es brauchen, um zu brechen, die Funktion der frühen (in dem Fall einer bloßenreturn
ist häufiger), oder zurück, etwas anderes alsNone
. Es macht auch Sinn und scheint zu sein, idiomatisch zu schreibenreturn None
wenn es in eine Funktion, die einen anderen Weg gibt, die etwas anderes alsNone
. Schreibenreturn None
ausdrücklich darauf hingewiesen wird, einen visuellen Hinweis für den Leser, dass es eine andere Filiale gibt etwas interessanter (und dass der Aufruf-code wird wahrscheinlich benötigen, behandeln beide Arten von Rückgabewerten).Oft in Python, Funktionen, die die Rückkehr
None
sind wievoid
Funktionen in C -- Ihr Zweck ist im Allgemeinen auf die input-Argumente im Ort (es sei denn, Sie verwenden Globale Daten (schaudert)). RückkehrNone
in der Regel macht es deutlicher, dass die Argumente wurden mutiert. Dies macht es ein wenig klarer, warum es Sinn macht, lassen Sie diereturn
Aussage von einem "Sprach-Konventionen" Standpunkt.Sagte, dass, wenn Sie arbeiten in einer code-Basis, die bereits pre-set-Konventionen um diese Dinge, würde ich auf jeden Fall nachziehen zu helfen, die code-Basis bleiben einheitliche...
return
Aussage, es gibtNone
.void
im Ausdruck und auch Warnungen und Fehler, wenn Sie versuchen zu erklären, eine Funktion, die keinen Rückgabewert an alle, die sich seiner Kontrolle Pfade. Eigentlich die meisten anderen Sprachen sind strenger, wenn es um die Rückgabewerte als Initialisierung der Variablen.Ruby
undJavascript
nehmen den gleichen Ansatz, wie python. Ich bin mir sicher, dass es Beispiele für high-level-Sprachen, die sagen, "void", in dem Ausdruck aber ich kann nicht jeder denken im moment (vielleicht, wenn man bedenktJava
eine high-level-Sprache) ... Wie würde monkey-patching Funktion (was nützlich ist, für Spott in tests unter anderem) die Arbeit in einer hypothetischen Welt, wo python bekam einevoid
keyword, dass es so gemacht das die Funktion nicht zurückkehren, was? (Auch, wie ich schon sagte, brauchen Sie nicht, um mich zu überzeugen, dass dies ein schlechtes design. Ich kann nichts tun, selbst wenn du Recht hast)None
wenn es keinereturn
ist äußerst sinnvoll. Was anderes wäre es wieder, außer nichts?None
ist das gleiche Konzept wienil
odervoid
odernothing
. Wäre es schlimm implizit zurück0
, weil das eine ganze Zahl mit einem sinnvollen Wert. Das ist, warumNone
vorhanden ist.None
ist die gleiche wie die Rückkehrnothing
.None
istnothing
. Das ist der Zweck derNone
zu kommunizieren, die Ideenothing
.None
mit keine return-Anweisung, da bist du nicht wieder irgendetwas, und das ist, wasNone
ist für.return
- Anweisung. Der horror! 🙂a = myfunc()
initialisierta
, so wirft ein nicht initialisiertes Fehler wäre sinnlos.None
's ganze Aufgabe im Leben ist es, das Gegenteil von etwas (irgendwelche sinnvollen Wert), so dass, wenn eine Funktion nichts zurückgibt, ist das das gleiche als RückkehrNone
.In Bezug auf Funktionalität, diese sind alle die gleichen, der Unterschied zwischen Ihnen ist die Lesbarkeit des Codes und Stil (was ist wichtig zu berücksichtigen)