Dans ce didacticiel, vous apprendrez tout sur les fonctions lambda en Python – de la syntaxe pour définir les fonctions lambda aux différents cas d’utilisation avec des exemples de code.
En Python, les lambdas sont des fonctions anonymes qui ont une syntaxe concise et peuvent être utilisées avec d’autres fonctions intégrées utiles. À la fin de ce didacticiel, vous aurez appris à définir les fonctions lambda et à quel moment vous devriez envisager de les utiliser par rapport aux fonctions Python classiques.
Commençons!
Table des matières
Fonction Python Lambda : syntaxe et exemples
Voici la syntaxe générale pour définir une fonction lambda en Python :
lambda parameter(s):return value
Dans la syntaxe générale ci-dessus :
- lambda est le mot clé que vous devez utiliser pour définir une fonction lambda, suivi d’un ou plusieurs paramètres que la fonction doit prendre.
- Il y a deux points séparant les paramètres et la valeur de retour.
💡 Lors de la définition d’une fonction lambda, vous devez vous assurer que la valeur de retour est calculée en évaluant une expression qui s’étend sur une seule ligne de code. Vous comprendrez mieux cela lorsque nous coderons des exemples.
Exemples de fonctions Python Lambda
La meilleure façon de comprendre les fonctions lambda est de commencer par réécrire les fonctions Python standard en tant que fonctions lambda.
👩🏽💻 Vous pouvez coder dans un REPL Python ou dans l’éditeur Python en ligne de toptips.fr.
#1. Considérez la fonction suivante square(), qui prend un nombre, num, comme argument et renvoie le carré du nombre.
def square(num): return num*num
Vous pouvez appeler la fonction avec des arguments et vérifier qu’elle fonctionne correctement.
>>> square(9) 81 >>> square(12) 144
Vous pouvez affecter cette expression lambda à un nom de variable, par exemple carré1 pour rendre la définition de la fonction plus concise : carré1 = lambda num : num*num, puis appeler la fonction carré1 avec n’importe quel nombre comme argument. Cependant, nous savons que les lambdas sont des fonctions anonymes, vous devez donc éviter de les affecter à une variable.
Pour la fonction square(), le paramètre est num et la valeur de retour est num*num. Une fois que nous les avons identifiés, nous pouvons les brancher dans l’expression lambda et l’appeler avec un argument, comme indiqué :
>>> (lambda num: num*num)(2) 4
C’est le concept d’expression de fonction immédiatement appelée, où nous appelons une fonction juste après l’avoir définie.
#2. Ensuite, réécrivons une autre fonction simple add() qui prend en nombres, num1 et num2, et renvoie leur somme, num1 + num2.
def add(num1,num2): return num1 + num2
Appelons la fonction add() avec deux nombres comme arguments :
>>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18
Dans ce cas, num1 et num2 sont les deux paramètres et la valeur de retour est num1 + num2.
>>> (lambda num1, num2: num1 + num2)(3,7) 10
Les fonctions Python peuvent également prendre des valeurs par défaut pour les paramètres. Modifions la définition de la fonction add() et définissons la valeur par défaut du paramètre num2 sur 10.
def add(num1, num2=10): return num1 + num2
Dans les appels de fonction suivants :
- Dans le premier appel de fonction, la valeur de num1 est 1 et la valeur de num2 est 3. Lorsque vous transmettez la valeur de num2 dans l’appel de fonction, cette valeur est utilisée ; la fonction renvoie 4.
- Cependant, si vous ne transmettez qu’un seul argument (num1 est 7), la valeur par défaut de 10 est utilisée pour num2 ; la fonction renvoie 17.
>>> add(1,3) 4 >>> add(7) 17
Lors de l’écriture de fonctions qui prennent des valeurs par défaut pour certains paramètres en tant qu’expressions lambda, vous pouvez spécifier la valeur par défaut lors de la définition des paramètres.
>>> (lambda num1, num2 = 10: num1 + num2)(1) 11
Quand devez-vous utiliser les fonctions Lambda en Python ?
Maintenant que vous avez appris les bases des fonctions lambda en Python, voici quelques cas d’utilisation :
- Lorsque vous avez une fonction dont l’expression de retour est une seule ligne de code et que vous n’avez pas besoin de référencer la fonction ailleurs dans le même module, vous pouvez utiliser les fonctions lambda. Nous avons également codé quelques exemples pour comprendre cela.
- Vous pouvez utiliser les fonctions lambda lorsque vous utilisez des fonctions intégrées, telles que map(), filter() et reduce().
- Les fonctions Lambda peuvent être utiles pour trier les structures de données Python telles que les listes et les dictionnaires.
Comment utiliser Python Lambda avec des fonctions intégrées
1. Utilisation de Lambda avec map()
La fonction map() prend un itérable et une fonction et applique la fonction à chaque élément de l’itérable, comme indiqué :
Créons une liste de nombres et utilisons la fonction map() pour créer une nouvelle liste contenant le carré de chaque nombre de la liste de nombres. Notez l’utilisation de la fonction lambda pour définir l’opération de mise au carré.
>>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]
Comme la fonction map() renvoie un objet map, nous devons le convertir en liste.
▶️ Découvrez ce tutoriel sur la fonction map() en Python.
2. Utilisation de Lambda avec filter()
Définissons nums, une liste de nombres :
>>> nums = [4,5,6,9]
Supposons que vous souhaitiez filtrer cette liste et ne conserver que les nombres impairs.
Vous pouvez utiliser la fonction intégrée filter() de Python.
La fonction filter() prend une condition et un itérable : filter(condition, iterable). Le résultat contient uniquement les éléments de l’itérable d’origine qui satisfont à la condition. Vous pouvez convertir l’objet renvoyé en un itérable Python tel que list.
Pour filtrer tous les nombres pairs, nous ne retiendrons que les nombres impairs. L’expression lambda doit donc être lambda num : num%2!=0. La quantité num%2 est le reste lorsque num est divisé par 2.
- num%2!=0 est vrai chaque fois que num est impair, et
- num%2!=0 est faux chaque fois que num est pair.
>>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]
3. Utilisation de Lambda avec reduce()
La fonction reduce() prend un itérable et une fonction. Il réduit l’itérable en appliquant la fonction de manière itérative sur les éléments de l’itérable.
Pour utiliser la fonction reduce(), vous devrez l’importer depuis le module functools intégré de Python :
>>> from functools import reduce
Utilisons la fonction reduce() pour calculer la somme de tous les nombres de la liste des nombres. Nous définissons une expression lambda : lambda num1,num2:num1+num2, comme fonction de somme réductrice.
L’opération de réduction se déroulera comme ceci : f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Ici, f est l’opération de sommation sur deux éléments de la liste, définie par la fonction lambda.
>>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24
Fonctions Python Lambda pour personnaliser le tri
En plus d’utiliser les fonctions lambda avec les fonctions Python intégrées, telles que map(), filter() et reduce(), vous pouvez également les utiliser pour personnaliser les fonctions et méthodes intégrées utilisées pour le tri.
1. Trier les listes Python
Lorsque vous travaillez avec des listes Python, vous devrez souvent les trier en fonction de certains critères de tri. Pour trier les listes Python sur place, vous pouvez utiliser la méthode sort() intégrée sur celles-ci. Si vous avez besoin d’une copie triée de la liste, vous pouvez utiliser la fonction sorted().
La syntaxe pour utiliser la fonction triée() de Python est triée(itérable, clé=…, inverse= Vrai | Faux).
– Le paramètre clé permet de personnaliser le tri.
– Le paramètre reverse peut être défini sur True ou False ; la valeur par défaut est Faux.
Lors du tri de listes de nombres et de chaînes, le tri par défaut s’effectue respectivement par ordre croissant et par ordre alphabétique. Cependant, vous pouvez parfois souhaiter définir un critère personnalisé pour le tri.
Considérez les fruits de la liste suivante. Supposons que vous souhaitiez obtenir une copie triée de la liste. Vous devez trier les chaînes en fonction du nombre d’occurrences de ‘p’ qu’elles contiennent – dans l’ordre décroissant.
>>> fruits = ['apple','pineapple','grapes','mango']
Il est temps d’utiliser le paramètre clé facultatif. Une chaîne est un itérable en Python et pour obtenir le nombre d’occurrences d’un caractère qu’elle contient, vous pouvez utiliser la méthode intégrée .count() . Nous définissons donc la clé sur lambda x:x.count(‘p’) afin que le tri soit basé sur le nombre de fois que ‘p’ apparaît dans la chaîne.
>>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']
Dans cet exemple :
- La clé à trier est le nombre d’occurrences du caractère ‘p’, et il est défini comme une expression lambda.
- Comme nous avons défini le paramètre reverse sur True, le tri s’effectue dans l’ordre décroissant du nombre d’occurrences de ‘p’.
Dans la liste des fruits, « ananas » contient 3 occurrences de « p », et les chaînes « pomme », « raisins » et « mangue » contiennent respectivement 2, 1 et 0 occurrences de « p ».
Comprendre le tri stable
Prenons un autre exemple. Pour le même critère de tri, nous avons redéfini la liste des fruits. Ici, ‘p’ apparaît dans les chaînes ‘apple’ et ‘grapes’ respectivement deux fois et une fois. Et cela ne se produit jamais dans les chaînes ‘mangue’ et ‘melon’.
>>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']
Dans la liste de sortie, ‘mangue’ vient avant ‘melon’ même s’ils n’ont pas tous les deux le caractère ‘p’. Mais pourquoi est-ce le cas? La fonction triée() effectue un tri stable ; ainsi, lorsque le nombre de ‘p’ est égal pour deux chaînes, l’ordre des éléments dans la liste de fruits d’origine est préservé.
En guise d’exercice rapide, échangez les positions de «mangue» et de «melon» dans la liste des fruits, triez la liste en fonction du même critère et observez le résultat.
▶️ En savoir plus sur le tri des listes Python.
2. Trier un dictionnaire Python
Vous pouvez également utiliser des lambdas lors du tri des dictionnaires Python. Considérez le dictionnaire price_dict suivant qui contient des articles et leurs prix.
>>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }
Pour obtenir les paires clé-valeur d’un dictionnaire sous forme de liste de tuples, vous pouvez utiliser la méthode de dictionnaire intégrée .items() :
>>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])
En Python, tous les itérables : listes, tuples, chaînes, etc., suivent l’indexation zéro. Ainsi, le premier élément est à l’index 0, le second à l’index 1, et ainsi de suite.
Nous aimerions trier par la valeur, qui est le prix de chaque article du dictionnaire. Dans chaque tuple de la liste price_dict_items, l’élément à l’index 1 est le prix. Nous définissons donc la clé sur lambda x:x[1] car il utilisera l’élément à l’index 1, le prix, pour trier le dictionnaire.
>>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}
Dans la sortie, les éléments du dictionnaire ont été triés par ordre croissant de prix : de « Candy », au prix de 3 unités, à « Honey », au prix de 15 unités.
▶️ Pour en savoir plus, consultez ce guide détaillé sur le tri d’un dictionnaire Python par clé et valeur.
Résumé
Et voila! Vous avez appris à définir des fonctions lambda et à les utiliser efficacement avec d’autres fonctions Python intégrées. Voici un résumé des principaux plats à emporter :
- En Python, les lambdas sont des fonctions anonymes qui peuvent prendre plusieurs arguments et renvoyer une valeur ; l’expression à évaluer pour générer cette valeur de retour doit être une ligne de code. Ils peuvent être utilisés pour rendre les petites définitions de fonctions plus concises.
- Pour définir la fonction Lambda, vous pouvez utiliser la syntaxe : paramètre(s) lambda : valeur de retour.
- Certains des cas d’utilisation importants incluent leur utilisation avec les fonctions map(), filter() et reduce() et comme paramètre clé pour personnaliser le tri des itérables Python.
Ensuite, apprenez à effectuer une division au sol en Python.