Fonctions lambda, map et filter
Fonction lambda
Une fonction lambda est une fonction anonyme qui peut avoir n'importe quel nombre d'arguments, mais ne peut avoir qu'une seule expression. Elle prend la forme lambda arguments: expression. Par exemple, si l'on veut définir une fonction qui retourne le carré d'un nombre, on peut utiliser une fonction lambda comme suit:
Une fonction lambda peut également prendre plusieurs arguments. Par exemple, si l'on veut définir une fonction qui retourne la somme de deux nombres, on peut utiliser une fonction lambda comme suit:
Peut-être que nous voyez pas l'intérêt de cette fonctionnalité comparé aux fonctions normales. En effet, les fonctions lambda sont souvent utilisées en conjonction avec les fonctions map et filter que nous allons voir dans un instant pour effectuer des opérations sur des listes.
La fonction map
La fonction map permet d'appliquer une fonction à chaque élément d'une liste. Elle prend la forme map(fonction, liste). Par exemple, si l'on veut appliquer notre fonction carre qui prend un élément et retourne son carré à chaque élément d'une liste, on peut utiliser la fonction map comme suit:
Ici, la fonction carre est appliquée à chaque élément de la liste [1, 2, 3, 4, 5] et le résultat est stocké dans un objet map. Pour obtenir le résultat sous forme de liste, on utilise la fonction list pour convertir l'objet map en liste.
Il faut noter que la fonction utilisée doit prendre un seul argument et retourner un résultat. Au lieu de définir une fonction carre séparément, on peut utiliser une fonction lambda pour définir la fonction directement dans l'appel à map. Cela rend le code plus concis et plus lisible.
La fonction filter
La fonction filter permet de filtrer les éléments d'une liste en fonction d'une fonction de test. Similaire à la fonction map, elle prend la forme filter(fonction, liste). Par exemple, si l'on veut filtrer les éléments pairs d'une liste, on peut utiliser la fonction filter comme suit:
Il faut noter que la fonction utilisée doit prendre un seul argument et retourner un résultat booléen. Ici, la fonction est_pair retourne True si l'élément est pair et False sinon. Le résultat est stocké dans un objet filter qui peut être converti en liste en utilisant la fonction list. Tout comme avec la fonction map, on peut utiliser une fonction lambda pour définir la fonction de test directement dans l'appel à filter.
Différence avec la compréhension de liste
Vous vous demandez possiblement la différence entre ces fonctions (map et filter) et la compréhension de liste que nous avons vu précédemment. En effet, la compréhension de liste est souvent plus lisible et plus rapide que l'utilisation de ces fonctions, elle est donc à privilégier dans la plupart des cas. Cependant, si une fonction existe déjà ou si vous avez besoin de réutiliser une fonction, les fonctions map et filter peuvent être utiles.