Non, non, rassurez-vous, pas de maths ici ( quoique...), la notion de fonction en informatique est assez différente de celle utilisée en mathématiques.
Vous avez en fait déjà utilisé des fonctions ( print(), input(),...), mais à quoi exactement correspond cette notion ?
Certaines parties de programme peuvent ( ou doivent ) être parfois utilisées plusieurs fois; il est donc nécessaire de pouvoir les « appeler » sans pour autant ré-écrire à chaque fois l'ensemble du code.
Ces parties de programmes peuvent être regroupées dans des fonctions qui faciliteront la lecture et la compréhension du programme principal.
Voici un exemple qui illustre la nécessité et l'intérêt de ce concept.
Supposons que vous deviez écrire un script qui calcule le volume d'un parallélépipède pour différentes valeurs de ses côtés. On pourrait écrire par exemple quelque chose comme :
On constate tout de suite que l'on a écrit à peu près 3 fois la même chose, en ne modifiant à chaque fois que la valeur des variables...
Il serait donc judicieux de coder une seule fois les instructions communes aux différentes parties du script ci-dessus, tout en permettant à ces instructions de "s'adapter" à des valeurs de variables différentes :
c'est le rôle d'une fonction, qui va "regrouper" en un même endroit du code la ou les instruction(s) qui réalisent le traitement :
fonction permettant de calculer le volume :
volume = longueur x largeur x hauteur
renvoyer le résultat
# cas n°1
utiliser la fonction avec les valeurs 5,10 et 8
imprimer le résultat
# cas n°2
utiliser la fonction avec les valeurs 15,12 et 10
imprimer le résultat
# cas n°3
utiliser la fonction avec les valeurs 10,10 et 20
imprimer le résultat
Le script est ainsi beaucoup plus concis et lisible, sa maintenance et son débogage en seront très facilités !!
Une fonction est donc une sorte de "programme dans le programme".
1. Fonctions en Python et vocabulaire
Comme dans tout langage, une fonction en Python suit des règles d'écriture et d'utilisation précises.
1.1. Définition d'une fonction
1.1.1. Syntaxe
La définition d'une fonction correspond à l'écriture des instructions qui effectueront la tache pour laquelle elle est conçue.
Dans le cas d'un langage compilé ( comme C, Java, C++,...), la définition des fonctions peut se faire n'importe où dans le code, en dehors du corps principal du programme.
Dans le cas des langages de script comme Python, la définition des fonctions doit se faire avant leur utilisation dans le code, donc généralement en tout début de script, après les éventuelles instructions
d'importation de module(s).
en Python, la définition d'une fonction commence par le mot-clé def
une fonction a un nom; les mêmes restrictions que pour les noms de variables s'appliquent ici aussi
une fonction peut avoir des paramètres : il s'agit de une ( ou plusieurs...ou zéro ! ) variables ( séparées par des virgules ) qui "récupéreront" les valeurs que l'on aura "envoyées" depuis le
programme principal à la fonction pour qu'elle travaille avec. Une fonction peut en avoir zéro, un ou plusieurs.
les instructions définissant le corps de la fonction sont indentées par rapport au mot-clédef.
à la fin de la fonction, le mot clé return suivi du résultat du traitement ( une valeur particulière ou le contenu d'une variable ) permet de renvoyer le résultat du travail de la fonction
au programme principal.
Une fonction peut éventuellement renvoyer plusieurs résultats différents ( séparés par des virgules ), ou alors aucun ( dans ce cas, le mot-clé return n'est pas utile ).
Pour l'exemple d'introduction, on pourrait ainsi définir une fonction calcul_volume() de la façon suivante :
defcalcul_volume(longueur, largeur, hauteur):# la fonction a besoin de 3 paramètres pour faire le calcul du volume
volume = longueur * largeur * hauteur
return volume
On notera bien que, pour l'instant, la valeur des variables longueur, largeur et hauteur n'est pas encore définie ( elles n'ont même pas été initialisées ! ).
On leur donnera en fait des valeurs par la suite, lorsqu'on appellera ( c'est à dire, exécutera ) vraiment la fonction.
Pour l'instant, ces variables sont donc l'équivalent du "x" dans une équation mathématique, c'est à dire quelque chose qui peut prendre a priori n'importe quelle valeur.
On ne mettra donc surtout pas deinput() ou de largeur = 3 dans une fonction pour coder "en dur" la valeur des paramètres, ce n'est pas comme ça que cela fonctionne !!
1.1.2. Quelques exemples de définition de fonctions
une fonction qui calcule le volume d'une sphère, qui a comme paramètre le rayon ( r ) de la sphère, et qui renvoie un résultat de type float :
defvolume_sphere(r):
pi =3.1415
volume =(4/3)*pi*r**3return volume
Une fonction qui renvoie un message de bienvenue à un utilisateur, et qui a comme paramètre le nom de cet utilisateur :
defmessage_de_bienvenue( nom ):return'Bonjour'+ nom +'et bienvenue dans ce programme.'
Une fonction qui a deux nombres comme paramètres, et qui renvoie 2 résultats, le quotient et le reste de leur division :
defdivision( n1, n2 ):
quotient = n1 // n2
reste = n1 % n2
return quotient, reste
1.2. Appel d'une fonction
1.2.1. Principe
Pour "utiliser" ensuite une fonction une fois celle-ci définie, il faut l'appeler afin qu'elle s’exécute : si on définit une fonction sans l'appeler, rien ne se passera !
L'appel d'une fonction correspond au moment où on l’exécute; cet appel prend la forme d'une instruction généralement placée dans le corps principal du programme. ( mais pas obligatoirement :
une fonction peut appeler une autre fonction ! )
Lors de l'appel d'une fonction, il se passe en réalité plusieurs choses au même endroit du script :
on passe ( = "transmet" ) à la fonction certaines données appelées arguments qui seront "récupérés" par les paramètres de la fonction.
la fonction exécute la tache pour laquelle elle est conçue en utilisant les données de ses paramètres.
la fonction renvoie alors son résultat, et le programme principal "récupère" ce résultat
( Tout se passe donc comme si l'instruction d'appel avait été remplacée dans le code par les instructions de la fonction. )
L'appel d'une fonction se fait simplement en indiquant son nom, avec entre parenthèses, la liste du ( ou des ) arguments(s) à lui passer, dans le même ordre que celui des paramètres
dans sa définition.( si la fonction n'a aucun paramètre, on ne lui passe aucun argument ! ).
Les arguments peuvent être des valeurs, des noms de variables, des expressions, etc...
nom_de_la_fonction(arg1, arg2,...)
Mais attention, le fait qu'une fonction renvoie un résultat ne veut pas dire que le programme principal peut directement l'utiliser; lors de l'appel d'une fonction, il faut donc en plus "faire quelque chose" du résultat
renvoyé par la fonction, comme l'afficher ou l'affecter à une variable ( sinon ce résultat est "perdu" ! ) :
print(nom_de_la_fonction(arg1, arg2,...))# affichage de la valeur renvoyée par la fonction
result = nom_de_la_fonction(arg1, arg2,...)# la variable result contiendra la valeur renvoyée par la fonction
Le fait qu'une fonction renvoie un résultat ne veut pas dire que celui-ci va s'afficher !
1.2.2. Quelques exemples d'appel de fonction
# Définition des fonctionsdefmessage_de_bienvenue( nom ):return'Bonjour'+ nom +'et bienvenue dans ce programme.'defvolume_sphere(r):
pi =3.1415
volume =(4/3)*pi*r**3return volume
defdivision( n1, n2 ):
quotient = n1 // n2
reste = n1 % n2
return quotient, reste
defcalcul_volume(longueur, largeur, hauteur):# la fonction a besoin de 3 paramètres pour faire le calcul du volume
volume = longueur * largeur * hauteur
return volume
# Programme principal
nom =input('Quel est votre nom ?')print(message_de_bienvenue( nom ))
volume = volume_sphere(5)# calcul du volume d'une sphère de rayon r = 5print( volume )
volume = calcul_volume(10,5,2)print( volume )
quotient, reste = division(125,23)# il faut passer 2 arguments, et récupérer 2 résultats !!print('Quotient =', quotient)print('Reste =', reste )
On peut remarquer qu'il n'y a pas d'ordre particulier pour la définition des fonctions, du moment que cette définition se fait avant l'appel de la fonction.
2. QCM d'entraînement
3. Exercices
3.1. Fonction cube ( un seul paramètre )
Écrire une fonction cube() qui retourne le cube de la valeur passée en paramètre.
Écrire une instruction qui appelle la fonction avec divers arguments, et qui affiche le résultat qu'elle renvoie
Définir une fonction convertir_temperature() qui prend comme paramètre une température en °C, et qui renvoie la valeur de cette température convertie en Fahrenheit.
Écrire une suite instructions qui demande à l'utilisateur une valeur de température, qui appelle la fonction avec cet argument, et qui affiche le résultat qu'elle renvoie
Définir une fonction miroir() qui prend comme paramètre une chaîne de caractères, et qui renvoie la chaîne avec ses caractères en sens inverse.
Écrire une suite instructions qui demande à l'utilisateur une chaîne de caractères, qui appelle la fonction avec cet argument, et qui affiche le résultat qu'elle renvoie