Contactez-nous

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 8

Dans 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)) # 25

Exemple : 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 lambdaFonctions nommées (def)
Anonymes (pas de nom)Ont un nom
Une seule expressionPeuvent contenir plusieurs instructions
Pas de docstring possiblePeuvent avoir une docstring
Syntaxe conciseSyntaxe plus verbeuse
Souvent utilisées pour des opérations simples et des fonctions de rappelUtilisé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.