Les fonctions et leurs paramètres
Ce que ce chapitre apporte 6 points
- Expliquer l'intérêt de structurer un programme en fonctions.
- Définir une fonction, l'appeler, et employer la valeur qu'elle retourne.
- Distinguer paramètre, argument et valeur de retour, et prévoir l'effet d'une modification du paramètre, qui n'est qu'une copie de l'argument.
- Suivre ce qui se passe pendant un appel : interruption, passage des valeurs, retour.
- Déterminer ce qu'une fonction voit et ne voit pas, dans les deux sens, et expliquer pourquoi ses variables disparaissent.
- Repérer ce qui change sur ces points en passant à Python.
Sur une ligne d'usinage, le même contrôle revient à trois endroits du programme de suivi : à la réception des pièces brutes, après le tournage, avant l'expédition. Chaque fois, il s'agit de dire si un diamètre tient dans sa tolérance. Recopier ce test trois fois est la garantie qu'au jour où la tolérance changera, on corrigera deux copies et pas la troisième. Une fonction donne à ce traitement un nom, des entrées et une sortie : on l'écrit une fois, on l'appelle partout. C'est aussi ce qui permet de lire un algorithme long sans le lire en entier.
La question est donc double : comment écrire ce contrôle une seule fois, et comment l'appeler de trois endroits sans qu'un appel dérange les deux autres ? Le chapitre s'appuie sur les variables et l'affectation, sur les conditions, qui écrivent le test lui-même, et sur les tableaux, qu'une fonction peut recevoir.
Les chapitres précédents écrivaient chaque algorithme d'un seul bloc, du début à la fin. Le chapitre sur les tableaux a pourtant déjà employé une fonction, sans s'y attarder : longueur, qui reçoit un tableau et rend son nombre de cases. Ce chapitre montre comment écrire les siennes, et surtout ce qui se passe exactement quand on les appelle : ce qui entre, ce qui sort, et ce que la fonction ne voit pas.
Qu'est-ce qu'une fonction ?
Une fonction est un bloc d'instructions regroupées sous un nom, qui exécute une tâche précise. Une fois définie, elle peut être appelée plusieurs fois depuis différents endroits de l'algorithme.
On peut comparer une fonction à une machine-outil dans un atelier : elle porte un nom, on lui fournit éventuellement des pièces à l'entrée, et elle produit un résultat, ou se contente d'effectuer une opération.
programme principal
aucune variable
Cet algorithme définit une fonction Bonjour qui affiche un message, puis l'appelle deux fois depuis le programme principal. Plutôt que de recopier les mêmes instructions, on les regroupe dans une seule fonction réutilisable.
Écrire une fonction, puis l'appeler
La structure générale d'une fonction est la suivante :
et pour l'appeler :
nom()
Fonction ouvre la définition, FinFonction la ferme, et les parenthèses qui suivent le nom recevront plus loin les paramètres. Définir une fonction n'exécute rien : son corps ne s'exécute qu'au moment où une ligne l'appelle, par son nom suivi de parenthèses. Dans un algorithme complet, les fonctions s'écrivent en premier, avant le Début ; le programme principal, entre Début et Fin, vient ensuite et les appelle.
L'intérêt est de factoriser le code : une action qui se répète s'écrit une seule fois, dans une fonction, puis s'appelle à chaque besoin.
programme principal
aucune variable
Ce qui s'affiche :
----------
Rapport de production
----------
Les deux traits encadrent le titre, et c'est tout l'intérêt de l'exemple : la même instruction sert deux fois, à deux endroits, sans être recopiée. Changer la longueur du trait se fait alors à un seul endroit.
Paramètres et arguments
Un paramètre est une variable nommée dans l'en-tête de la fonction, qui attend une valeur. Un argument est la valeur effectivement fournie au moment de l'appel. Dans Fonction Bonjour(nom), nom est le paramètre ; dans Bonjour("Alice"), "Alice" est l'argument. Le paramètre s'écrit une fois, l'argument change à chaque appel.
programme principal
aucune variable
Quand on appelle Bonjour("Alice"), le paramètre nom est créé et reçoit une copie de l'argument : c'est le passage par valeur. La fonction travaille sur cette copie le temps de l'appel, et l'appelant garde sa propre valeur ; un tableau passé en argument est copié de la même façon, case par case. La section sur la portée montre ce que cette copie protège. La fonction devient ainsi un modèle, que l'on réutilise avec des valeurs différentes.
Une fonction peut recevoir plusieurs paramètres, séparés par des virgules ; les arguments leur sont attribués dans l'ordre, le premier au premier, le deuxième au deuxième. La section suivante en donne un exemple.
Valeur de retour
Une fonction peut rendre une valeur au programme qui l'appelle, avec l'instruction Retourner, le seul mot de retour du cours. Cette valeur peut ensuite être rangée dans une variable ou employée dans un calcul.
programme principal
La fonction Carré calcule le carré du nombre reçu et le rend au programme principal, qui le range dans resultat. Elle ne se contente plus d'agir : elle produit un résultat réutilisable.
Une fonction qui ne retourne rien, comme Bonjour ou Ligne, se contente d'agir ; certains cours l'appellent une procédure. Son appel s'écrit seul sur sa ligne, et ne peut pas servir de valeur : x ← Ligne() arrête l'algorithme, faute de valeur à ranger.
Avec plusieurs paramètres, le principe ne change pas. Cette fonction calcule un prix soldé, à partir du prix et du taux de remise en pourcentage :
programme principal
aucune variable
Deux paramètres, et deux arguments attribués dans l'ordre : au premier appel, 80 va au prix et 25 au taux, soit 60 euros. Parce que la fonction retourne son résultat au lieu de l'afficher, l'appelant en fait ce qu'il veut : ici l'écrire, ailleurs l'ajouter à des frais de port ou le comparer à un budget. C'est la règle à retenir : une bonne fonction effectue une tâche précise et rend un résultat clair.
Écrire 2 * x et Retourner 2 * x dans une fonction : quelle différence ?
Ce qui se passe pendant un appel
Un appel interrompt le programme principal, crée les paramètres, exécute le corps de la fonction, puis rend la main. Voici l'enchaînement exact, sur resultat ← Carré(5).
- Le programme principal s'interrompt sur cette ligne. Il ne continue pas en parallèle : il attend.
- Le paramètre
xde la fonction est créé et reçoit une copie de la valeur5. - Le corps de la fonction s'exécute, et lui seul.
Retourner x * xcalcule25, sort immédiatement de la fonction, et rend cette valeur.- Le paramètre
xcesse d'exister. - Le programme principal reprend là où il s'était arrêté,
Carré(5)ayant été remplacé par25.
programme principal
a y vaut 5, et resultat n'existe pas encore. Au pas 3, un second encadré marqué Carré s'ouvre à côté, avec x qui vaut 5, et celui du programme principal pâlit : il attend. Au pas 4, de retour sur la ligne d'appel, l'encadré de Carré a disparu et resultat vaut 25. Noter ce que contient l'encadré du programme principal à chacun de ces trois pas, et constater que x n'y figure jamais.
L'encadré de Carré n'existe que pendant l'appel : c'est la portée, que le chapitre décrit plus bas, et elle se voit avant de se définir.
La ligne d'appel se lit comme une valeur. Une fois la fonction terminée, Carré(5) ne se lit plus comme un appel mais comme le nombre 25. C'est pourquoi on peut écrire resultat ← Carré(5) + 1, ou passer l'appel directement à Écrire. Une fonction qui retourne une valeur s'emploie partout où l'on écrirait cette valeur.
L'inverse est une erreur silencieuse : Carré(5), écrit seul sur une ligne, calcule 25 et le jette. Une valeur retournée qu'on ne range nulle part est perdue.
1.Pendant l'exécution de resultat ← Carré(5), que fait le programme principal ?
2.Après v ← Carré(5), la variable x de la fonction vaut quoi dans le programme principal ?
La portée : ce qu'une fonction voit et ne voit pas
C'est le point qui surprend le plus, et il découle de l'étape 5 ci-dessus.
La portée d'une variable est la partie de l'algorithme où elle existe. Les variables créées dans une fonction, paramètres compris, n'existent que pendant son exécution : on dit qu'elles sont locales. Celles du programme principal n'existent que dans le programme principal. Aucun des deux ne voit les variables de l'autre.
Ce que le programme principal ne voit pas
programme principal
aucune variable
L'avant-dernière ligne échoue, et c'est voulu ; la dernière échouerait de la même façon, mais l'algorithme s'est arrêté avant. x et resultat appartiennent à la fonction ; le programme principal ne les a jamais vues. La seule chose qui ressort d'une fonction est ce qu'elle retourne.
Ce que la fonction ne voit pas
La frontière vaut dans les deux directions : une fonction ne voit pas davantage les variables du programme principal. Tout ce dont elle a besoin doit lui arriver par un paramètre.
programme principal
La figure s'arrête sur la ligne 2 : seuil existe bien, et l'encadré du programme principal le montre, mais la fonction n'y a pas accès. La correction fait entrer le seuil par la porte prévue, un second paramètre :
programme principal
La figure corrigée affiche Vrai : 95 dépasse le seuil de 80. Le paramètre porte le même nom que la variable du programme principal, mais ce sont deux variables distinctes ; l'encadré marqué EnAlerte montre la copie que la fonction a reçue.
Au moment de l'appel, c'est la valeur de l'argument qui est copiée dans le paramètre, pas la variable elle-même. Modifier le paramètre ne touche donc pas la variable de l'appelant, même quand les deux portent le même nom.
programme principal
La figure affiche « Prix : 50, prix soldé : 45 » : les deux prix sont deux boîtes distinctes, l'une dans la fonction, l'autre dans le programme principal, et seul ce que Retourner rend traverse la frontière. Un tableau passé en argument est copié lui aussi :
programme principal
La fonction met à zéro la première case de sa copie ; celle de l'appelant garde 12. C'est une protection : appeler une fonction ne peut pas modifier en douce les variables de l'appelant, et c'est ce qui permet de réutiliser une fonction sans la relire.
Une fonction ne communique avec le reste du programme que par deux portes : ses paramètres à l'entrée, sa valeur de retour à la sortie. Tout ce qui doit entrer passe par un paramètre, tout ce qui doit sortir passe par Retourner.
Une fonction qui aurait besoin de dix informations extérieures pour travailler est le signe qu'elle en fait trop, et qu'il faut la couper en deux.
Le parcours Python montre un langage moins strict sur deux points. Une liste passée en paramètre n'y est pas recopiée : la fonction reçoit la liste de l'appelant elle-même, et EffacerPremier y mettrait bien à zéro le premier relevé du programme principal. Et une fonction peut y lire une variable du programme principal, qu'on appelle alors une variable globale : la première version d'EnAlerte y fonctionnerait sans second paramètre. La règle de ce chapitre reste la bonne pratique, tout entre par les paramètres et tout sort par le retour ; mais en Python, c'est au programmeur de s'y tenir, le langage ne l'impose plus.
1.Une fonction a un paramètre x, et le programme principal a aussi une variable x. Que se passe-t-il ?
2.Dans ce cours, une fonction reçoit un tableau et exécute t[1] ← 0. Que devient le tableau de l'appelant ?
3.Par où une fonction communique-t-elle avec le reste du programme ?
Mettre en pratique
Un appel se lit comme la valeur qu'il rend. Chaque question se résout en remplaçant les appels par leurs valeurs, du plus intérieur au plus extérieur, sans perdre de vue qu'un paramètre reçoit une copie.
Ce que rendent les appels
- 1.
Avec la fonction
PrixRemise(prix, taux)du chapitre, quel prix, en euros, rend l'appelPrixRemise(250, 12)? - 2.
Les deux arguments écrits dans l'autre ordre,
PrixRemise(12, 250): que rend l'appel ? - 3.
Avec la fonction
TTCde l'exercice 1, qui ajoute 20 % de TVA, que rendTTC(PrixRemise(80, 25)), en euros ? - 4.
Avec
Carréet la fonctionMoyenne(a, b)de l'exercice 2, que rendMoyenne(Carré(3), Carré(5))? - 5.
Le programme principal exécute
prix ← 200, puissolde ← AppliquerRemise(prix), avec la fonction de la section sur la portée. Que vaut ensuiteprix - solde?
Chaque exercice demande la fonction et son appel : une fonction qu'on n'appelle jamais ne sert à rien.
Écrire une fonction TTC(ht) qui rend le prix toutes taxes comprises d'un prix hors taxes, la TVA étant de 20 %, et l'appeler pour un prix de 50 euros.
programme principal
aucune variable
Ajouter 20 % revient à multiplier par 1,2. Retourner rend la valeur et sort immédiatement de la fonction. Le programme principal récupère cette valeur dans prix, comme si TTC(50) était le nombre 60.
Écrire Écrire ht * 1.2 à l'intérieur de la fonction au lieu de Retourner ht * 1.2. La fonction affiche alors le résultat mais ne le rend pas : impossible de le réutiliser dans un calcul, par exemple pour additionner les prix d'une commande. Afficher et retourner ne sont pas la même chose.
Écrire une fonction Moyenne(a, b) qui rend la moyenne de deux mesures, et la tester avec 10 et 16.
programme principal
aucune variable
Les parenthèses autour de a + b sont indispensables : sans elles, a + b / 2 calculerait a + (b / 2), soit 18 au lieu de 13. La division passe avant l'addition, comme en mathématiques.
On peut appeler la fonction directement dans le Écrire : la valeur retournée prend la place de l'appel.
Une pièce est conforme si son diamètre est compris entre 19,5 et 20,5 mm, bornes comprises. Écrire une fonction EstConforme(diametre) qui rend Vrai si la pièce est conforme, Faux sinon, et l'employer sur un diamètre lu.
programme principal
Une fonction peut rendre un booléen, c'est-à-dire Vrai ou Faux. Elle s'emploie alors directement comme condition : Si EstConforme(d) Alors se lit « si la pièce est conforme ».
Version plus courte, puisque la comparaison produit déjà un booléen :
Les bornes comprises s'écrivent >= et <= : avec > et <, une pièce à 20,5 mm exactement, pourtant dans la tolérance, serait mise à reprendre.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Retourner plutôt qu'afficher, l'appel qui vaut une valeur, et ce qu'une fonction ne voit pas.
- Retourner ou afficher3 · Combiner
- L'appel vaut une valeur3 · Combiner
- Ce que la fonction ne voit pas4 · Analyser
- Une fonction qui calcule une aire3 · Combiner
- La fonction qui affiche au lieu de rendre4 · Analyser
- La fonction maximum3 · Combiner