No comportamento real, não há diferença. Todos eles retornam None
e é isso. No entanto, há um tempo e um lugar para todos eles. As instruções a seguir são basicamente como os diferentes métodos devem ser usados (ou pelo menos como eu fui ensinado que eles devem ser usados), mas eles não são regras absolutas, portanto você pode misturá-los se achar necessário.
Usando return None
Isso indica que a função realmente deve retornar um valor para uso posterior e, nesse caso, ela retorna None
. Esse valor None
pode ser usado em outro lugar. return None
nunca será usado se não houver outros valores de retorno possíveis da função.
No exemplo a seguir, retornamos person
's mother
se o person
dado é humano. Se não é humano, retornamos, None
pois person
não possui um mother
(suponha que não seja um animal ou algo assim).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Usando return
Isso é usado pelo mesmo motivo que break
em loops. O valor de retorno não importa e você deseja apenas sair de toda a função. É extremamente útil em alguns lugares, mesmo que você não precise com tanta frequência.
Temos 15 prisoners
e sabemos que um deles tem uma faca. Percorremos cada prisoner
um por um para verificar se eles têm uma faca. Se batermos na pessoa com uma faca, podemos simplesmente sair da função, porque sabemos que há apenas uma faca e não há razão para o resto da verificação prisoners
. Se não encontrarmos prisoner
com uma faca, acionamos um alerta. Isso pode ser feito de muitas maneiras diferentes e o uso return
provavelmente não é o melhor, mas é apenas um exemplo para mostrar como usar return
para sair de uma função.
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()
Nota: Você nunca deve fazer isso var = find_prisoner_with_knife()
, pois o valor de retorno não deve ser capturado.
Não usar return
em tudo
Isso também retornará None
, mas esse valor não deve ser usado ou capturado. Significa simplesmente que a função terminou com sucesso. É basicamente o mesmo que return
em void
funções em linguagens como C ++ ou Java.
No exemplo a seguir, definimos o nome da mãe da pessoa e a função é encerrada após a conclusão com êxito.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Nota: Você nunca deve fazer isso var = set_mother(my_person, my_mother)
, pois o valor de retorno não deve ser capturado.
return None
implica para mim que a função às vezes tem umNone
valor de não retorno, mas no local dereturn None
, não existe esse valor de retorno. Escrever não significareturn
para mim que nunca há um valor de retorno interessante, como um "procedimento" em oposição a uma "função".return
implica a existência antecipada de um "procedimento" conforme o ponto anterior.