Beim tatsächlichen Verhalten gibt es keinen Unterschied. Sie alle kehren zurück Noneund das war's. Für all dies gibt es jedoch eine Zeit und einen Ort. Die folgenden Anweisungen beschreiben im Wesentlichen, wie die verschiedenen Methoden verwendet werden sollten (oder zumindest, wie mir beigebracht wurde, dass sie verwendet werden sollten), aber sie sind keine absoluten Regeln, sodass Sie sie verwechseln können, wenn Sie dies für erforderlich halten.
Verwenden von return None
Dies zeigt an, dass die Funktion tatsächlich einen Wert für die spätere Verwendung zurückgeben soll, und in diesem Fall gibt sie zurück None. Dieser Wert Nonekann dann an anderer Stelle verwendet werden. return Nonewird niemals verwendet, wenn keine anderen möglichen Rückgabewerte von der Funktion vorhanden sind.
Im folgenden Beispiel geben wir persons zurück, motherwenn das personGegebene ein Mensch ist. Wenn es kein Mensch ist, kehren wir zurück, Noneda der personkein hat mother(nehmen wir an, es ist kein Tier oder so).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Verwenden von return
Dies wird aus dem gleichen Grund wie breakin Schleifen verwendet. Der Rückgabewert spielt keine Rolle und Sie möchten nur die gesamte Funktion beenden. Es ist an einigen Stellen äußerst nützlich, obwohl Sie es nicht so oft benötigen.
Wir haben 15 prisonersund wir wissen, dass einer von ihnen ein Messer hat. Wir durchlaufen jeden prisonernach dem anderen, um zu überprüfen, ob sie ein Messer haben. Wenn wir die Person mit einem Messer schlagen, können wir die Funktion einfach beenden, weil wir wissen, dass es nur ein Messer gibt und keinen Grund, den Rest zu überprüfen prisoners. Wenn wir das prisonermit einem Messer nicht finden, lösen wir einen Alarm aus. Dies kann auf viele verschiedene Arten geschehen, und die Verwendung returnist wahrscheinlich nicht einmal die beste, aber es ist nur ein Beispiel, um zu zeigen, wie returneine Funktion beendet wird.
def find_prisoner_with_knife(prisoners):
for prisoner in prisoners:
if "knife" in prisoner.items:
prisoner.move_to_inquisition()
return # no need to check rest of the prisoners nor raise an alert
raise_alert()
Hinweis: Dies sollten Sie niemals tun var = find_prisoner_with_knife(), da der Rückgabewert nicht zum Abfangen gedacht ist.
Mit nicht returnüberhaupt
Dies wird ebenfalls zurückgegeben None, aber dieser Wert soll nicht verwendet oder abgefangen werden. Es bedeutet einfach, dass die Funktion erfolgreich beendet wurde. Es ist im Grunde das gleiche wie returnbei voidFunktionen in Sprachen wie C ++ oder Java.
Im folgenden Beispiel legen wir den Namen der Mutter der Person fest und die Funktion wird nach erfolgreichem Abschluss beendet.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Hinweis: Dies sollten Sie niemals tun var = set_mother(my_person, my_mother), da der Rückgabewert nicht zum Abfangen gedacht ist.
return Noneimpliziert für mich, dass die Funktion manchmal einenNoneRückgabewert hat, aber an der Stelle vonreturn Nonegibt es keinen solchen Rückgabewert. Neinreturnzu schreiben bedeutet für mich, dass es nie einen interessanten Rückgabewert gibt, ein bisschen wie eine "Prozedur" im Gegensatz zu einer "Funktion".returnimpliziert, früh von einem "Verfahren" gemäß dem vorherigen Punkt zu existieren.