Présentation de l’instruction return et cas d’utilisation
Jusqu’à présent, nos fonctions n’ont fait qu’afficher leur résultat après qu’on les ait appelées. En pratique, cette façon de procéder est rarement utilisée et ceci pour deux raisons : d’une part, nous n’avons aucun contrôle sur le résultat affiché puisque celui est affiché dès que la fonction a fini de s’exécuter et ensuite car nous ne pouvons pas utiliser ce résultat pour effectuer de nouvelles opérations.
Or, en programmation, nous voudrons souvent récupérer le résultat d’une fonction afin de l’utiliser dans le reste de notre script. Pour cela, il va falloir qu’on demande à notre fonction de retourner (renvoyer) le résultat de ses opérations. Nous allons pouvoir faire cela en Python grâce à l’instruction return
.
Attention cependant : l’instruction return
va terminer l’exécution d’une fonction, ce qui signifie qu’on placera généralement cette instruction en fin de fonction puisque le code suivant une instruction return
dans une fonction ne sera jamais lu ni exécuté.
Premier exemple d’utilisation de return en Python
Imaginons que nous soyons en train de créer un programme relativement complexe qui effectue des séries de calculs intermédiaires pour finalement arriver à un résultat final.
Notre programme va être composé de différentes fonctions qui vont se charger d’effectuer ces différents calculs à la suite les unes des autres. Certaines fonctions vont fonctionner différemment ou même ne pas s’exécuter du tout en fonction du résultat renvoyé par la fonction précédente dans la chaine de fonctions.
Ce type de situations est très fréquent en programmation : on exécute une première fonction qui renvoie un résultat et on injecte ce résultat dans la fonction suivante et etc. On va pouvoir faire cela avec une instruction return
.
Pour cela, créons par exemple une fonction très simple qui renvoie la différence entre deux nombres.
Ici, on utilise return
afin de demander à notre fonction de retourner son résultat. On stocke ensuite ce résultat dans une variable x
dont on pourra se resservir dans la suite du script.
Utiliser return pour retourner plusieurs valeurs
Une fonction ne peut retourner qu’une donnée à la fois. Cependant, Python met à notre disposition des types de données composites comme les listes ou les tuples par exemple.
On va donc pouvoir utiliser return
pour faire retourner “plusieurs valeurs” à la fois à nos fonctions ou pour être tout à fait exact pour leur faire retourner une donnée composite.
Pour cela, on va préciser les différentes valeurs que doit retourner return
en les séparant par des virgules. Les valeurs retournées seront retournées dans un tuple.
Les fonctions récursives
Nous avons vu dans les leçon précédente qu’une fonction pouvait exécuter une autre fonction, par exemple dans le cas où on demande à une fonction d’exécuter une fonction print()
pour afficher une valeur.
Vous devez savoir qu’une fonction peut également s’appeler elle même dans son exécution : c’est ce qu’on appelle la récursivité. Lorsqu’on définit une fonction récursive, il faudra toujours faire bien attention à fournir une condition qui sera fausse à un moment ou l’autre au risque que la fonction s’appelle à l’infini.
L’exemple de fonction récursive par excellence est la définition d’une fonction qui calculerait une factorielle. La factorielle d’un nombre est le produit des nombres entiers inférieurs ou égaux à celui-ci; la factorielle de 4 par exemple est égale à 4 * 3 * 2 * 1.
Créons immédiatement cette fonction :
Ici, la condition de sortie de notre fonction est atteinte dès que la valeur passée en argument atteint ou est inférieure à 1. Expliquons comment fonctionne cette fonction en détail. Si on passe une valeur inférieure ou égale à 1 à notre fonction au départ, on retourne la valeur 1 et la fonction s’arrête.
Si on passe une valeur strictement supérieure à 1, on retourne cette valeur et on appelle factorielle(n-1)
. Si n-1 représente toujours une valeur strictement supérieure à 1, on retourne cette valeur et on appelle à nouveau notre fonction avec une valeur diminuée de 1 et etc. Jusqu’à ce que la valeur passée à factorielle()
atteigne 1.
Un peu de vocabulaire : fonction vs procédure en Python
Par définition, toute fonction est censée renvoyer une valeur. Une fonction qui ne renvoie pas de valeur n’est pas une fonction : on appelle cela en programmation une procédure.
En Python, en fait, même les fonctions sans instruction return
explicite renvoient une valeur qui est None
. Le valeur None
est une valeur qui correspond justement à l’absence de valeur. Cette valeur sert à indiquer “il n’y a pas de valeur”.
L’interpréteur Python l’ignore lorsque c’est la seule valeur qui est renvoyée mais elle existe tout de même et c’est la raison pour laquelle on appelle les fonctions qui ne possèdent pas de return
explicite des fonctions en Python.