Od rzeczywistego zachowania nie ma różnicy. Wszyscy wracają Nonei to wszystko. Jest jednak czas i miejsce na wszystkie z nich. Poniższe instrukcje przedstawiają w zasadzie, w jaki sposób należy stosować różne metody (a przynajmniej tak, jak mnie nauczono, jak należy ich używać), ale nie są to bezwzględne zasady, więc możesz je mieszać, jeśli uważasz, że jest to konieczne.
Za pomocą return None
To mówi, że funkcja rzeczywiście ma zwrócić wartość do późniejszego użycia, w tym przypadku zwraca None. Tę wartość Nonemożna następnie wykorzystać w innym miejscu. return Nonenigdy nie jest używane, jeśli nie ma innych możliwych wartości zwracanych z funkcji.
W poniższym przykładzie zwracamy person, motherjeśli persondany jest człowiekiem. Jeśli to nie jest człowiek, wracamy, Noneponieważ personnie ma mother(przypuśćmy, że to nie zwierzę ani coś takiego).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Za pomocą return
Jest to używane z tego samego powodu, co breakw pętlach. Zwracana wartość nie ma znaczenia i chcesz tylko wyjść z całej funkcji. Jest to niezwykle przydatne w niektórych miejscach, nawet jeśli nie jest to tak często potrzebne.
Mamy 15 prisonersi wiemy, że jeden z nich ma nóż. Pętlimy po prisonerkolei, aby sprawdzić, czy mają nóż. Jeśli uderzymy osobę nożem, możemy po prostu wyjść z funkcji, ponieważ wiemy, że jest tylko jeden nóż i nie ma powodu, aby sprawdzić resztę prisoners. Jeśli nie znajdziemy prisonernoża, alarmujemy. Można to zrobić na wiele różnych sposobów, a użycie returnprawdopodobnie nie jest nawet najlepszym sposobem, ale jest to tylko przykład pokazujący, jak używać returndo wychodzenia z funkcji.
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()
Uwaga: Nigdy nie należy tego robić var = find_prisoner_with_knife(), ponieważ wartość zwracana nie jest przeznaczona do przechwycenia.
W ogóle nie returnużywam
To również zwróci None, ale ta wartość nie jest przeznaczona do użycia ani przechwycenia. Oznacza to po prostu, że funkcja zakończyła się powodzeniem. Zasadniczo jest taki sam, jak returnw voidfunkcjach w językach takich jak C ++ lub Java.
W poniższym przykładzie ustawiamy imię matki osoby, a następnie funkcja kończy działanie po pomyślnym zakończeniu.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Uwaga: Nigdy nie należy tego robić var = set_mother(my_person, my_mother), ponieważ wartość zwracana nie jest przeznaczona do przechwycenia.
return Nonesugeruje mi, że funkcja czasami maNonewartość zwrotną, ale w miejscureturn Nonetakiej wartości zwrotnej nie ma. Brakreturnzapisu sugeruje, że nigdy nie ma interesującej wartości zwracanej, takiej jak „procedura” w przeciwieństwie do „funkcji”.returnimplikuje istnienie wcześnie na podstawie „procedury” zgodnie z poprzednim punktem.