Démo : la même fonction, trois contextes
Une fonction qui retourne une valeur, sans aucun print(). Regarde ce que tu vois à l'écran selon l'endroit où tu lances le code. Le code est identique : seul le contexte change.
Le piège, en clair
Dans un calepin Colab (ou Jupyter), la dernière ligne d'une cellule, si c'est une valeur, est affichée automatiquement. Pratique... mais trompeur :
- Ça ne marche que pour une seule valeur : la dernière. Les appels au-dessus sont calculés puis jetés, sans rien montrer.
- Ça ne marche que dans Colab/Jupyter. Dans un vrai fichier
programme.pylancé normalement, rien ne s'affiche tout seul. - Du coup, on croit que
return« affiche » le résultat. Faux : c'est Colab qui rend service en douce.
Au prochain examen sur papier, ou dans un programme qui doit parler à un humain, ce réflexe te laisse tomber. Mieux vaut comprendre la vraie différence tout de suite.
La règle qui ne ment jamais
return
Donne la valeur au programme. Une autre ligne pourra la réutiliser, la stocker, la calculer. Mais ça n'affiche rien à l'écran.
print()
Montre quelque chose à l'humain, dans la console. Mais ça ne renvoie aucune valeur réutilisable (techniquement, ça retourne None).
Les deux ne servent pas à la même chose. Très souvent on veut les deux : la fonction return son résultat, et c'est l'appelant qui décide de l'afficher.
def calculerAire(rayon):
return 3.14159 * rayon ** 2 # rend la valeur au programme
aire = calculerAire(3) # on la garde dans une variable
print("L'aire vaut", aire) # on choisit de la montrer
Ce code affiche pareil partout : dans Colab, dans Jupyter, dans un vrai .py. Plus de magie cachée, plus de mauvaise surprise.
Le réflexe à prendre
Tant que tu débutes, un doute simple : « est-ce que je veux le VOIR ? »
- Oui, je veux le voir à l'écran -> j'écris un vrai
print(...). Toujours. Même si Colab l'aurait montré tout seul. - Je veux juste réutiliser la valeur plus loin ->
return(dans une fonction) ou je la range dans une variable.
Bonus : pour vérifier vite une valeur sans te répéter, print(f"{aire = }") affiche aire = 28.27. Voir le truc Le print espion.