Fonctions, modules et robustesse
Département de Mathématiques et Informatique, Faculté des Sciences et Techniques, Université Cheikh Anta Diop de Dakar
Contenu
À mesure qu’un programme grandit, on répète du code et on rencontre des erreurs. Cette séance apprend à organiser (des fonctions réutilisables), à réutiliser (des modules tout prêts), à conserver (des fichiers) et à fiabiliser (gérer les erreurs).
def, return, paramètres, valeurs par défaut, docstrings, portée.import pour réutiliser la bibliothèque standard.try / except pour ne pas planter.L’entraînement se fait dans le notebook, avec une cellule « À vous » après chaque notion.
Les arguments fournis à l’appel remplissent les paramètres ; le corps s’exécute ; return renvoie une valeur.
L’idée en une phrase
Une fonction est un bloc nommé qu’on définit une fois avec def, puis qu’on appelle autant de fois que nécessaire. return renvoie un résultat que l’on peut réutiliser.
Le bénéfice est double : on évite de répéter le même code (une correction se fait à un seul endroit), et on donne un nom à une opération, ce qui rend le programme lisible. Le corps de la fonction est un bloc indenté après les deux points.
Résultat →
14.0
13.5
a et b sont les paramètres ; 12 et 16 les arguments de l’appel. La même fonction sert pour n’importe quelles valeurs.
Résultat →
Fatou habite a Dakar.
Les arguments sont associés aux paramètres dans l’ordre : prenom reçoit « Fatou », ville reçoit « Dakar ».
Un paramètre peut avoir une valeur par défaut
Si l’argument n’est pas fourni, la valeur par défaut est utilisée.
Résultat →
Bonjour Awa
Bonsoir Awa
Résultat →
25
Renvoie le carre de x.
La docstring est une courte phrase placée juste sous le def. Elle explique ce que fait la fonction, sans qu’on ait à lire son code.
Une variable créée dans une fonction est locale
resultat n’existe que dans calcul. Y accéder à l’extérieur échoue.
NameError: name 'resultat' is not defined
Pour récupérer une valeur calculée dans une fonction, il faut la renvoyer avec return.
return n’est pas printRésultat →
x = 115
15
y = None
return renvoie une valeur (réutilisable dans un calcul) ; une fonction qui se contente d’afficher renvoie None.
L’idée en une phrase
Un module est une bibliothèque de code déjà écrit, qu’on importe pour l’utiliser. Python en fournit une riche collection en standard — inutile de tout réécrire.
Le module math donne les outils mathématiques, random le hasard, datetime les dates, etc. On importe une fois, en haut du fichier, puis on utilise. C’est un premier pas vers l’écosystème numpy / pandas qu’on découvrira à partir de la Séance 6.
importRésultat →
4.0
3.141592653589793
Après import math, on accède à ses outils en les préfixant par math. — ce qui indique clairement d’où ils viennent.
from ... importRésultat →
5.0
On importe seulement ce dont on a besoin ; sqrt s’utilise alors directement, sans préfixe. Pratique pour quelques fonctions bien identifiées.
L’idée en une phrase
Les variables disparaissent à la fin du programme. Un fichier permet de sauvegarder des données et de les retrouver plus tard. On l’ouvre avec open() dans un bloc with, qui le referme automatiquement.
Le mode précise l’intention : "w" écrit (et écrase le contenu existant), "a" ajoute à la fin, "r" lit (c’est le mode par défaut). Un fichier texte est une simple suite de lignes, séparées par \n.
Résultat →
fichier ecrit
Le bloc with ouvre villes.txt en écriture, y écrit trois lignes, puis le referme tout seul en sortant du bloc. Le \n marque la fin de chaque ligne.
Tout le contenu d’un coup, avec .read() :
Ou ligne par ligne, avec une boucle for (le plus courant) :
Résultat →
Dakar
Louga
Mbour
"w" écrase tout
Ouvrir un fichier existant en mode "w" efface son contenu avant d’écrire. Pour compléter un fichier sans le vider, on utilise le mode "a" (append). Pour seulement le lire, "r" (ou rien, c’est le défaut) — et écrire dans un fichier ouvert en lecture lève une erreur.
Toujours privilégier le bloc with : il garantit que le fichier est refermé, même si une erreur survient au milieu.
L’idée en une phrase
Certaines opérations échouent à l’exécution. Sans précaution, le programme s’arrête net :
ValueError: invalid literal for int() with base 10: 'abc'
On essaie le code risqué dans un bloc try, et on rattrape l’erreur dans un bloc except — le programme continue au lieu de s’interrompre.
try / exceptRésultat →
Ce n'est pas un nombre valide.
Le code du try s’exécute ; dès qu’une ValueError survient, on saute au except, qui affiche un message clair. Le programme n’a pas planté.
Renvoyer une valeur de repli plutôt que planter
On précise quelle erreur on rattrape (ZeroDivisionError).
Résultat →
5.0
impossible
Rattraper l’erreur attendue, pas toutes
On indique l’erreur précise qu’on sait gérer (ValueError, ZeroDivisionError, FileNotFoundError…). Un except sans type, qui rattrape tout, cache aussi les erreurs qu’on n’avait pas prévues (une faute de frappe dans un nom, par exemple) et rend les bugs très difficiles à trouver.
Régle : rattraper le moins possible — seulement ce que l’on sait traiter — et laisser remonter le reste.
L’essentiel
Fonction : def nom(parametres): + return ; appelée avec des arguments ; peut avoir des valeurs par défaut et une docstring.
Portée : une variable définie dans une fonction est locale ; pour en sortir une valeur, on la return. return \(\neq\) print.
Modules : import math puis math.sqrt, ou from math import sqrt.
Fichiers : with open("f.txt", "w") as f: pour écrire, "r" pour lire ; .read() ou boucle for ligne par ligne ; "w" écrase, "a" ajoute.
Exceptions : try: le code risqué, except l’erreur précise ; ne pas tout masquer.
NameError — la return.print au lieu de return (elle renvoie None).: ou l’indentation du corps de la fonction."w" un fichier qu’on voulait compléter : son contenu est effacé.except nu : les vrais bugs deviennent invisibles.Séance 5 — Programmation orientée objet
On sait écrire des fonctions. La Séance 5 introduit les objets : regrouper des données et les fonctions qui les manipulent dans une même classe (class, __init__, self, méthodes), puis spécialiser une classe par héritage et polymorphisme.
À faire d’ici là : refaire les cellules « À vous » du notebook de la séance.