Sur le comportement réel, il n'y a pas de différence. Ils reviennent tous None
et 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 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 retournons person
le s mother
si le person
donné est un humain. Si ce n'est pas un humain, nous revenons None
car le person
n'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 break
dans 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 prisoners
et nous savons que l'un d'eux a un couteau. Nous passons en revue chacun prisoner
d'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 prisoner
couteau, nous lançons une alerte. Cela peut être fait de différentes manières et l'utilisation return
n'est probablement même pas la meilleure façon, mais ce n'est qu'un exemple pour montrer comment l'utiliser return
pour 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 return
du 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 return
dans les void
fonctions 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 None
implique pour moi que la fonction a parfois uneNone
valeur de non- retour, mais à l'emplacement dereturn None
, il n'y a pas une telle valeur de retour. Ecrire nonreturn
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 d'exister très tôt à partir d'une "procédure" selon le point précédent.