Sur le comportement actuel, il n'y a pas de différence. Ils renvoient tous None
et c'est tout. Cependant, il y a un moment et un endroit pour chacun de ces cas. Les instructions suivantes expliquent essentiellement comment les différentes méthodes doivent être utilisées (ou du moins comment j'ai appris qu'elles devraient l'être), mais ce ne sont pas des règles absolues, donc vous pouvez les mélanger si vous le jugez nécessaire.
Utilisation de return None
Cela indique que la fonction est effectivement censée renvoyer une valeur pour une utilisation ultérieure, et dans ce cas elle renvoie None
. Cette valeur None
peut ensuite être utilisée ailleurs. return None
n'est jamais utilisé s'il n'y a pas d'autres valeurs de retour possibles de la fonction.
Dans l'exemple suivant, nous renvoyons la mère
de la personne
si la personne
donnée est humaine. Si ce n'est pas une humaine, nous renvoyons None
car la personne
n'a pas de mère
(supposons qu'elle n'est pas un animal ou quelque chose du genre).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Utilisation de return
Ceci est utilisé pour la même raison que break
dans les boucles. La valeur de retour n'a pas d'importance et vous voulez simplement sortir de toute la fonction. C'est extrêmement utile à certains endroits, même si vous n'en avez pas souvent besoin.
Nous avons 15 prisonniers
et nous savons que l'un d'eux a un couteau. Nous parcourons chaque prisonnier
un par un pour vérifier s'ils ont un couteau. Si nous tombons sur la personne avec le couteau, nous pouvons simplement quitter la fonction car nous savons qu'il n'y a qu'un couteau et aucune raison de vérifier le reste des prisonniers
. Si nous ne trouvons pas le prisonnier
avec le couteau, nous lançons une alerte. Cela pourrait être fait de nombreuses manières différentes et utiliser return
n'est probablement même pas la meilleure façon, mais c'est juste un exemple pour montrer comment utiliser return
pour sortir d'une fonction.
def find_prisoner_with_knife(prisoners):
for prisoner in prisoners:
if "knife" in prisoner.items:
prisoner.move_to_inquisition()
return # pas besoin de vérifier le reste des prisonniers ni de lancer une alerte
raise_alert()
Remarque : Vous ne devriez jamais faire var = find_prisoner_with_knife()
, car la valeur de retour n'est pas censée être récupérée.
Ne pas utiliser return
du tout
Cela renverra également None
, mais cette valeur n'est pas censée être utilisée ou récupérée. Cela signifie simplement que la fonction s'est terminée avec succès. C'est essentiellement la même chose que return
dans les fonctions void
dans des 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 réussi.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Remarque : Vous ne devriez jamais faire var = set_mother(my_person, my_mother)
, car la valeur de retour n'est pas censée être récupérée.
57 votes
Notez qu'il y a une différence stylistique.
return None
implique pour moi que la fonction a parfois une valeur de retour non-None
, mais à l'endroit dereturn None
, il n'y a pas de telle valeur de retour. Ne pas écrire dereturn
du tout implique pour moi qu'il n'y a jamais de valeur de retour intéressante, un peu comme une "procédure" par opposition à une "fonction".return
implique qu'il existe un retour précoce d'une "procédure" selon le point précédent.