Od rzeczywistego zachowania nie ma różnicy. Wszyscy wracają None
i 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ść None
można następnie wykorzystać w innym miejscu. return None
nigdy nie jest używane, jeśli nie ma innych możliwych wartości zwracanych z funkcji.
W poniższym przykładzie zwracamy person
, mother
jeśli person
dany jest człowiekiem. Jeśli to nie jest człowiek, wracamy, None
ponieważ person
nie 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 break
w 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 prisoners
i wiemy, że jeden z nich ma nóż. Pętlimy po prisoner
kolei, 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 prisoner
noża, alarmujemy. Można to zrobić na wiele różnych sposobów, a użycie return
prawdopodobnie nie jest nawet najlepszym sposobem, ale jest to tylko przykład pokazujący, jak używać return
do 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 return
uż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 return
w void
funkcjach 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 None
sugeruje mi, że funkcja czasami maNone
wartość zwrotną, ale w miejscureturn None
takiej wartości zwrotnej nie ma. Brakreturn
zapisu sugeruje, że nigdy nie ma interesującej wartości zwracanej, takiej jak „procedura” w przeciwieństwie do „funkcji”.return
implikuje istnienie wcześnie na podstawie „procedury” zgodnie z poprzednim punktem.