Sur le comportement réel, il n'y a pas de différence. Ils reviennent tous Noneet c'est tout. Cependant, il y a un temps et un lieu pour tout cela. Les instructions suivantes indiquent essentiellement comment les différentes méthodes doivent être utilisées (ou du moins comment on m'a appris qu'elles devraient être utilisées), mais ce ne sont pas des règles absolues, vous pouvez donc les mélanger si vous le jugez nécessaire.
En utilisant return None
Cela indique que la fonction est en effet destinée à renvoyer une valeur pour une utilisation ultérieure, et dans ce cas, elle retourne None. Cette valeur Nonepeut ensuite être utilisée ailleurs. return Nonen'est jamais utilisé s'il n'y a pas d'autres valeurs de retour possibles de la fonction.
Dans l'exemple suivant, nous retournons personle s mothersi le persondonné est un humain. Si ce n'est pas un humain, nous revenons Nonecar le personn'a pas mother(supposons que ce n'est pas un animal ou quelque chose).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
En utilisant return
Ceci est utilisé pour la même raison que breakdans les boucles. La valeur de retour n'a pas d'importance et vous souhaitez uniquement quitter la fonction entière. Il est extrêmement utile à certains endroits, même si vous n'en avez pas besoin souvent.
Nous en avons 15 prisonerset nous savons que l'un d'eux a un couteau. Nous passons en revue chacun prisonerd'eux pour vérifier s'ils ont un couteau. Si nous frappons la personne avec un couteau, nous pouvons simplement quitter la fonction parce que nous savons qu'il n'y a qu'un seul couteau et aucune raison de vérifier le reste du prisoners. Si nous ne trouvons pas le prisonercouteau, nous lançons une alerte. Cela peut être fait de différentes manières et l'utilisation returnn'est probablement même pas la meilleure façon, mais ce n'est qu'un exemple pour montrer comment l'utiliser returnpour quitter une fonction.
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()
Remarque: vous ne devriez jamais le faire var = find_prisoner_with_knife(), car la valeur de retour n'est pas destinée à être interceptée.
Ne pas utiliser returndu tout
Cela reviendra également None, mais cette valeur n'est pas destinée à être utilisée ou capturée. Cela signifie simplement que la fonction s'est terminée avec succès. C'est fondamentalement la même chose que returndans les voidfonctions de langages tels que C ++ ou Java.
Dans l'exemple suivant, nous définissons le nom de la mère de la personne, puis la fonction se termine après avoir terminé avec succès.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Remarque: vous ne devriez jamais le faire var = set_mother(my_person, my_mother), car la valeur de retour n'est pas destinée à être interceptée.
return Noneimplique pour moi que la fonction a parfois uneNonevaleur de non- retour, mais à l'emplacement dereturn None, il n'y a pas une telle valeur de retour. Ecrire nonreturnimplique pour moi qu'il n'y a jamais de valeur de retour intéressante, un peu comme une "procédure" par opposition à une "fonction".returnimplique d'exister très tôt à partir d'une "procédure" selon le point précédent.