Leçons ·
Écrire ses propres fonctions
Regrouper un calcul sous un nom, le réutiliser et le documenter, avec les prix d'Awa.
Transcription
Awa ajoute la taxe à ses prix à plusieurs endroits de son programme, et chaque fois, elle réécrit le même calcul. Le problème arrive le jour où le taux change : elle doit alors retrouver et corriger chaque ligne, avec le risque d'en oublier une.
Il faudrait donc écrire ce calcul une seule fois, puis s'en servir partout ? Oui, et c'est le rôle d'une fonction. Imaginez une machine dans un atelier. On met quelque chose à l'entrée, elle fait toujours le même travail, et elle rend un résultat à la sortie. Une fonction, c'est exactement cela.
Pour construire cette machine, Awa écrit le mot-clé def, qui vient du mot définir. Elle écrit ensuite le nom de la fonction, prix_ttc. Entre parenthèses, elle indique ce qui entre dans la machine, ici prix_ht, et qu'on appelle un paramètre. Elle termine par deux-points.
Vient ensuite le bloc de la fonction, c'est-à-dire le travail de la machine, décalé de quatre espaces. Ici, ce bloc correspond à une seule ligne, la ligne 2. L'instruction return indique le résultat à rendre à la sortie.
Donc à ce moment-là, Python a déjà calculé le prix ? Non, et c'est un point que beaucoup d'élèves trouvent surprenant. Pour l'instant, la machine est seulement construite, mais personne ne l'a mise en marche. Python retient simplement qu'elle existe.
Pour la mettre en marche, il faut l'appeler, en écrivant son nom suivi d'une valeur entre parenthèses. La valeur 10 000 entre alors dans la machine, et le paramètre prix_ht prend cette valeur.
La machine exécute son bloc : elle multiplie 10 000 par 1 virgule 1925, arrondit, et rend 11 925 à la sortie.
Le programme reprend alors là où il s'était arrêté, et la fonction print affiche ce résultat. Awa peut maintenant appeler cette machine autant de fois qu'elle veut, et si le taux change, elle ne corrige qu'une seule ligne.
Et si elle oublie l'instruction return ? Regardons ce qui se passe avec cette machine, qui doit doubler un prix. La valeur 100 entre bien, et son bloc, à la ligne 2, calcule bien 200.
Mais personne ne demande de rendre ce résultat, et il est donc perdu. La sortie de la machine reste vide. Python l'indique avec une valeur spéciale, None, qui veut dire qu'il n'y a rien.
Voilà donc la différence entre print et return. La fonction print montre une valeur à l'écran, pour nous, les humains. L'instruction return rend la valeur au programme, qui peut continuer à s'en servir. C'est un peu comme la différence entre montrer un billet à quelqu'un et le lui donner.
Mais certains de ses produits ne sont peut-être pas taxés de la même façon. Est-ce qu'il lui faut une deuxième machine ? Non, elle ajoute simplement une deuxième entrée à la même machine, le paramètre tva. Et comme le taux est presque toujours le même, elle lui donne une valeur par défaut, en écrivant le signe égal et 0 point 1925 dans la parenthèse.
Si elle appelle la fonction en donnant seulement le prix, Python utilise tout seul la valeur par défaut, et le résultat est encore 11 925.
Mais si elle écrit tva égale zéro dans l'appel, c'est cette valeur qui remplace celle par défaut. Il n'y a alors aucune taxe, et le prix reste 10 000.
Une bonne machine porte un nom qui dit ce qu'elle fait. C'est pourquoi on appelle cette fonction moyenne, et non traitement. Une fonction doit aussi faire une seule chose, car elle est alors plus simple à comprendre et à corriger.
Juste sous le def, on peut écrire une phrase entre trois guillemets, qui explique son rôle. C'est comme le mode d'emploi collé sur la machine. Et ce mode d'emploi, à qui sert-il ? Il sert à la personne qui relira le code dans six mois, qui sera peut-être vous, et la fonction help de Python sait aussi l'afficher.
Le bloc de cette fonction additionne les notes avec sum, compte combien il y en a avec len, puis divise. Avec les notes 12 et 15, la somme fait 27, et 27 divisé par 2 donne 13 virgule 5.
J'ai parfois vu le mot-clé lambda dans du code, c'est encore autre chose ? C'est une toute petite fonction d'une seule ligne, qu'on écrit sur place sans lui donner de nom. Pour comprendre à quoi elle sert, prenons une liste d'élèves avec leurs notes.
La fonction sorted sait classer, mais elle doit savoir selon quoi : le nom ou la note ? La lambda répond à cette question. Pour chaque élève n, elle regarde n de 1, c'est-à-dire la note, car on compte à partir de zéro. Et reverse égale True demande de commencer par la plus haute.
Inès arrive donc en tête avec 17. Maintenant, c'est à vous d'écrire vos propres fonctions dans la leçon, sans revoir la vidéo. Si vous hésitez, c'est normal, car c'est justement cet effort qui vous fera retenir.
Voix : Google Chirp 3 HD (Despina, Enceladus).
Photos : One Idea LLC, StockSnap, CC0

