Beim tatsächlichen Verhalten gibt es keinen Unterschied. Sie alle kehren zurück None
und 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 None
kann dann an anderer Stelle verwendet werden. return None
wird niemals verwendet, wenn keine anderen möglichen Rückgabewerte von der Funktion vorhanden sind.
Im folgenden Beispiel geben wir person
s zurück, mother
wenn das person
Gegebene ein Mensch ist. Wenn es kein Mensch ist, kehren wir zurück, None
da der person
kein 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 break
in 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 prisoners
und wir wissen, dass einer von ihnen ein Messer hat. Wir durchlaufen jeden prisoner
nach 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 prisoner
mit einem Messer nicht finden, lösen wir einen Alarm aus. Dies kann auf viele verschiedene Arten geschehen, und die Verwendung return
ist wahrscheinlich nicht einmal die beste, aber es ist nur ein Beispiel, um zu zeigen, wie return
eine 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 return
bei void
Funktionen 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 None
impliziert für mich, dass die Funktion manchmal einenNone
Rückgabewert hat, aber an der Stelle vonreturn None
gibt es keinen solchen Rückgabewert. Neinreturn
zu schreiben bedeutet für mich, dass es nie einen interessanten Rückgabewert gibt, ein bisschen wie eine "Prozedur" im Gegensatz zu einer "Funktion".return
impliziert, früh von einem "Verfahren" gemäß dem vorherigen Punkt zu existieren.