Aller au contenu
Fonctions

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

Modèle
def nom(param, param_optionnel=defaut):    """Ce que fait la fonction."""    ...    return resultat

Exemple

Exemple concret
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

  1. Sans return, une fonction renvoie None ; return a, b renvoie un tuple qu'on déballe avec x, y = f().
  2. 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 = [].
  3. La docstring, entre triples guillemets juste sous def, documente la fonction ; help(f) l'affiche.
  4. 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.
  5. 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