def — Définir une fonction
def regroupe un traitement sous un nom, avec des paramètres en entrée et return en sortie. Écrivez une fonction dès qu'un calcul sert deux fois ou mérite d'être vérifié à part.
- def
- return
- paramètre
- docstring
- valeur par défaut
- portée
Syntaxe
def nom(param, param_optionnel=defaut): """Ce que fait la fonction.""" ... return resultatExemple
def moyenne_ponderee(notes, coefs=None): """Moyenne des notes, pondérée si des coefficients sont fournis.""" if coefs is None: coefs = [1] * len(notes) return sum(n * c for n, c in zip(notes, coefs)) / sum(coefs)print(moyenne_ponderee([12, 15, 18])) # → 15.0print(moyenne_ponderee([12, 15, 18], [1, 1, 2])) # → 15.75# Le piège de l'argument par défaut mutabledef ajouter_note(note, carnet=[]): carnet.append(note) return carnetajouter_note(12)print(ajouter_note(15)) # → [12, 15] (la même liste survit d'un appel à l'autre)À retenir
- Sans return, une fonction renvoie None ; return a, b renvoie un tuple qu'on déballe avec x, y = f().
- Piège : une valeur par défaut est évaluée une seule fois, à la définition. Avec def f(carnet=[]), la même liste est partagée par tous les appels ; écrivez carnet=None puis if carnet is None: carnet = [].
- La docstring, entre triples guillemets juste sous def, documente la fonction ; help(f) l'affiche.
- Une variable affectée dans la fonction est locale. Modifier une variable globale demande global, ce qui signale presque toujours qu'il vaut mieux la passer en paramètre et renvoyer le résultat.
- Une bonne fonction fait une seule chose et renvoie son résultat plutôt que de l'afficher : elle reste réutilisable et vérifiable.
Voir aussi
- *args & **kwargs*args et **kwargs acceptent un nombre variable d'arguments, et les marqueurs / et * imposent un passage positionnel ou nommé. Ils permettent des fonctions souples au contrat clair.
- lambdalambda crée une petite fonction anonyme réduite à une seule expression. Elle sert surtout à passer un critère à sorted, min, max ou à une méthode pandas, là où une def serait disproportionnée.
- Annotations de typeLes annotations de type documentent ce qu'une fonction attend et renvoie (list[int], str | None). Python ne les vérifie pas à l'exécution, mais l'éditeur et mypy s'en servent pour repérer les erreurs.