Sobre el comportamiento real, no hay diferencia. Todos regresan None
y eso es todo. Sin embargo, hay un momento y un lugar para todo esto. Las siguientes instrucciones son básicamente cómo deberían usarse los diferentes métodos (o al menos cómo me enseñaron que deberían usarse), pero no son reglas absolutas, por lo que puede mezclarlos si lo considera necesario.
Utilizando return None
Esto indica que la función está destinada a devolver un valor para su uso posterior, y en este caso devuelve None
. Este valor None
se puede usar en otro lugar. return None
nunca se usa si no hay otros posibles valores de retorno de la función.
En el siguiente ejemplo, volvemos person
's mother
si el person
dado es un ser humano. Si no es un humano, regresamos None
ya person
que no tiene un mother
(supongamos que no es un animal o algo así).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Utilizando return
Esto se usa por la misma razón que break
en los bucles. El valor de retorno no importa y solo desea salir de toda la función. Es extremadamente útil en algunos lugares, aunque no lo necesite con tanta frecuencia.
Tenemos 15 prisoners
y sabemos que uno de ellos tiene un cuchillo. Recorremos cada prisoner
uno por uno para verificar si tienen un cuchillo. Si golpeamos a la persona con un cuchillo, simplemente podemos salir de la función porque sabemos que solo hay un cuchillo y no hay razón para verificar el resto prisoners
. Si no lo encontramos prisoner
con un cuchillo, levantamos una alerta. Esto podría hacerse de muchas maneras diferentes y el uso return
probablemente no sea la mejor manera, pero es solo un ejemplo para mostrar cómo usar return
para salir de una función.
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: nunca debe hacerlo var = find_prisoner_with_knife()
, ya que el valor de retorno no debe ser capturado.
Usando no return
en absoluto
Esto también regresará None
, pero ese valor no está destinado a ser usado o capturado. Simplemente significa que la función finalizó con éxito. Básicamente es lo mismo que return
en void
funciones en lenguajes como C ++ o Java.
En el siguiente ejemplo, establecemos el nombre de la madre de la persona y luego la función se cierra después de completarse con éxito.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Nota: nunca debe hacerlo var = set_mother(my_person, my_mother)
, ya que el valor de retorno no debe ser capturado.
return None
me implica que la función a veces tiene unNone
valor de no retorno, pero en la ubicación dereturn None
, no existe dicho valor de retorno. Escribir un noreturn
significa para mí que nunca hay un valor de retorno interesante, como un "procedimiento" en lugar de una "función".return
implica existir temprano de un "procedimiento" según el punto anterior.