No comportamento real, não há diferença. Todos eles retornam Nonee é 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 Nonepode ser usado em outro lugar. return Nonenunca será usado se não houver outros valores de retorno possíveis da função.
No exemplo a seguir, retornamos person's motherse o persondado é humano. Se não é humano, retornamos, Nonepois personnã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 breakem 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 prisonerse sabemos que um deles tem uma faca. Percorremos cada prisonerum 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 prisonercom uma faca, acionamos um alerta. Isso pode ser feito de muitas maneiras diferentes e o uso returnprovavelmente não é o melhor, mas é apenas um exemplo para mostrar como usar returnpara 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 returnem 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 returnem voidfunçõ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 Noneimplica para mim que a função às vezes tem umNonevalor de não retorno, mas no local dereturn None, não existe esse valor de retorno. Escrever não significareturnpara mim que nunca há um valor de retorno interessante, como um "procedimento" em oposição a uma "função".returnimplica a existência antecipada de um "procedimento" conforme o ponto anterior.