lambda
lambda 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.
- anonyme
- expression
- tri
- key
- fonction courte
Syntaxe
lambda param1, param2: expressionExemple
eleves = [("Ana", 14), ("Bob", 8), ("Chloé", 17)]print(sorted(eleves, key=lambda e: e[1])) # → [('Bob', 8), ('Ana', 14), ('Chloé', 17)]print(max(eleves, key=lambda e: e[1])[0]) # → Chloéprint(sorted(["Lyon", "Paris", "Nice"], key=lambda v: len(v))) # → ['Lyon', 'Nice', 'Paris']À retenir
- lambda x: x * 2 équivaut à def f(x): return x * 2, sans nom : une seule expression, pas de return, pas d'affectation.
- Piège : affecter une lambda à une variable (tva = lambda ht: ht * 1.2) cache son nom dans les messages d'erreur. Dès qu'une fonction a un nom, écrivez une def (recommandation de la PEP 8).
- Piège : dans une boucle, une lambda capture la variable et non sa valeur du moment : [lambda: i for i in range(3)] donne trois fonctions qui renvoient toutes 2. Figez la valeur avec lambda i=i: i.
- Pour extraire un champ, operator.itemgetter(1) ou operator.attrgetter("note") sont plus explicites qu'une lambda.
Voir aussi
- sorted, min, maxsorted, min et max trient ou extraient les extrêmes, et leur paramètre key choisit le critère : une colonne, une longueur, un calcul. C'est l'usage le plus courant des fonctions lambda.
- def — Définir une fonctiondef 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.
- CompréhensionsUne compréhension construit une liste, un dictionnaire ou un ensemble en une seule expression qui transforme et filtre. Employez-la dès qu'une boucle ne sert qu'à remplir une collection.