
Fonctions lambda : fonctions anonymes
Découvrez les fonctions lambda en Python (fonctions anonymes). Créez des fonctions courtes et concises, idéales pour les opérations simples et les fonctions de rappel. Apprenez leur syntaxe et leurs limitations.
Qu'est-ce qu'une fonction lambda ? Définition et caractéristiques
En Python, une fonction lambda (ou expression lambda) est une petite fonction anonyme. Cela signifie qu'elle n'a pas de nom (contrairement aux fonctions définies avec `def`).
Les fonctions lambda sont souvent utilisées pour créer des fonctions courtes et simples, en une seule ligne de code. Elles sont particulièrement utiles pour :
- Les opérations simples qui peuvent être exprimées en une seule expression.
- Les fonctions de rappel (callbacks) passées à d'autres fonctions (comme `map`, `filter`, `sort`, etc.).
- Les cas où vous avez besoin d'une fonction temporaire et que vous ne voulez pas définir une fonction nommée complète.
Les fonctions lambda sont limitées : elles ne peuvent contenir qu'une seule expression. Cette expression est évaluée et son résultat est retourné implicitement (pas besoin d'utiliser le mot-clé `return`).
Syntaxe des fonctions lambda : lambda arguments: expression
La syntaxe d'une fonction lambda est la suivante :
lambda arguments: expression- `lambda` : Le mot-clé qui indique qu'il s'agit d'une fonction lambda.
- `arguments` : Une liste d'arguments (séparés par des virgules), similaire aux paramètres d'une fonction classique. Vous pouvez avoir zéro, un ou plusieurs arguments.
- `:` : Le deux-points qui sépare les arguments de l'expression.
- `expression`: Une seule expression Python qui est évaluée et dont le résultat est retourné par la fonction lambda.
Exemple : Une fonction lambda qui additionne deux nombres :
additionner = lambda x, y: x + y
print(additionner(5, 3)) # Affiche 8Dans cet exemple, `lambda x, y: x + y` crée une fonction anonyme qui prend deux arguments (`x` et `y`) et retourne leur somme. Cette fonction est ensuite affectée à la variable `additionner`.
Les fonctions lambda peuvent être utilisées partout où une fonction est attendue.
Exemple : Une fonction lambda qui élève au carré
carre = lambda x: x**2
print(carre(5)) # 25Exemple : une fonction lambda sans argument.
afficher_bonjour = lambda: print("Bonjour")
afficher_bonjour() # Affiche 'Bonjour'Utilisations courantes des fonctions lambda
Voici quelques utilisations courantes des fonctions lambda :
- Avec `map()` : Appliquer une fonction à chaque élément d'un itérable.
- Avec `filter()` : Sélectionner les éléments d'un itérable qui satisfont une condition.
- Avec `sorted()` et `sort()` : Spécifier une clé de tri personnalisée.
- Comme fonctions de rappel (callbacks) : Dans les interfaces graphiques, la gestion d'événements, etc.
- Dans les compréhensions de listes/dictionnaires/ensembles : Pour des opérations simples.
Exemples :
nombres = [1, 2, 3, 4, 5]
# map() : Appliquer la fonction lambda (qui élève au carré) à chaque élément de la liste
carres = list(map(lambda x: x**2, nombres))
print(carres) # Affiche [1, 4, 9, 16, 25]
# filter() : Sélectionner les nombres pairs
pairs = list(filter(lambda x: x % 2 == 0, nombres))
print(pairs) # Affiche [2, 4]
# sorted() : Trier une liste de tuples par le deuxième élément de chaque tuple
points = [(1, 5), (3, 2), (2, 8), (4, 1)]
tries = sorted(points, key=lambda point: point[1])
print(tries) # Affiche [(4, 1), (3, 2), (1, 5), (2, 8)]Limitations des fonctions lambda
Les fonctions lambda sont puissantes, mais elles ont des limitations :
- Une seule expression : Une fonction lambda ne peut contenir qu'une seule expression. Cela signifie que vous ne pouvez pas avoir de blocs d'instructions complexes, de boucles, de conditions multiples, etc.
- Pas de docstring : Vous ne pouvez pas ajouter de docstring à une fonction lambda.
- Pas de nom (anonyme) : Les fonctions lambda n'ont pas de nom, ce qui peut rendre le débogage plus difficile (les traces d'appels montrent `
` au lieu d'un nom de fonction significatif).
Si vous avez besoin d'une fonction plus complexe, avec plusieurs instructions, des docstrings, ou un nom explicite, utilisez une fonction définie avec `def`.
Fonctions lambda vs. fonctions nommées (def)
Voici un tableau comparatif entre les fonctions lambda et les fonctions nommées (définies avec `def`) :
| Fonctions lambda | Fonctions nommées (def) |
|---|---|
| Anonymes (pas de nom) | Ont un nom |
| Une seule expression | Peuvent contenir plusieurs instructions |
| Pas de docstring possible | Peuvent avoir une docstring |
| Syntaxe concise | Syntaxe plus verbeuse |
| Souvent utilisées pour des opérations simples et des fonctions de rappel | Utilisées pour des fonctions plus complexes et réutilisables |
En résumé, les fonctions lambda sont utiles pour des fonctions courtes et simples, souvent utilisées "en passant", tandis que les fonctions nommées sont plus adaptées pour des fonctions plus complexes, réutilisables, et qui nécessitent une documentation.