Bonjour à tous,
Je vois bien qu’il existe une différence entre les deux commandes énoncées dans le titre, mais je ne sais pas exactement ce qu’elles font.
Partons d’un exemple, avec une fonction très simple qui me donne le nombre maximum entre deux nombres :
def maximum_ret(x,y):
if x>y:
return(x)
elif x==y:
return("Les deux nombres sont égaux")
elif y>x:
return(y)
def maximum_pri(x,y):
if x>y:
print(x)
elif x==y:
print("Les deux nombres sont égaux")
elif y>x:
print(y)
A priori, ces deux fonctions me donnent le même résultat :
>>> maximum_ret(3,4)
4
>>> maximum_pri(3,4)
4
>>> maximum_ret(42,42)
'Les deux nombres sont égaux'
>>> maximum_pri(42,42)
Les deux nombres sont égaux
Pourtant :
>>> maximum_ret(3,4)==maximum_pri(3,4)
False
Au début je pensais que ça venait du fait que ce n’était pas la même fonction définie, mais j’ai fait un test de type :
>>> type(maximum_pri(42,42))
<class 'NoneType'>
>>> type(maximum_ret(42,42))
<class 'str'>
Donc il s’avère que ces deux fonctions ne retournent pas le même type d’objet.
Après quelques essais je suis tombé sur ça aussi par exemple :
>>> maximum_ret(3,maximum_ret(2,4))
4
>>> maximum_pri(3,maximum_ret(2,4))
4
>>> maximum_pri(3,maximum_pri(2,4))
Traceback (most recent call last):
File "<console>", line 1, in <module>
def maximum_pri(x,y):
File "<tmp 3>", line 2, in maximum_pri
TypeError: unorderable types: int() > NoneType()
Ainsi, avec « return » on peut « emboîter » plusieurs fonctions, ce qui n’est pas possible avec « print »…
J’ai bien une hypothèse sur le fonctionnement de ces deux commandes mais quelqu’un pourrait-il préciser s’il vous plaît ?
Edit : Hypothèse : La commande « return » conserve le type d’objet manipulé (list, str, int, float etc …) alors que « print » a juste une vocation d’affichage et ne possède pas de type particulier (NoneType). C’est pourquoi on ne peut pas emboîter plusieurs fonctions avec « print » : ça n’a pas de sens de comparer des « float » avec des « NoneType » par exemple
Je vous remercie d’avance
!
Bonne journée.
Ingens