Python Fonctions Lambda avec EXEMPLES
โก Rรฉsumรฉ intelligent
Fonctions Lambda dans Python Ce sont de petites fonctions anonymes dรฉfinies avec le mot-clรฉ lambda au lieu de def. Elles contiennent une seule expression, acceptent un nombre quelconque d'arguments et sont souvent passรฉes directement ร des fonctions intรฉgrรฉes telles que map(), filter() et sorted().

Qu'est-ce que la fonction Lambda dans Python?
A Fonction Lambda dans Python la programmation est une fonction anonyme ou une fonction n'ayant pas de nom. Il s'agit d'une fonction petite et restreinte ne comportant pas plus d'une ligne. Tout comme une fonction normale, une fonction Lambda peut avoir plusieurs arguments avec une seule expression.
In Python, les expressions lambda (ou formes lambda) sont utilisรฉes pour construire des fonctions anonymes. Pour ce faire, vous utiliserez le lambda mot-clรฉ (tout comme vous utilisez def pour dรฉfinir les fonctions normales). Chaque fonction anonyme que vous dรฉfinissez dans Python comportera 3 parties essentielles :
- Le mot-clรฉ lambda.
- Les paramรจtres (ou variables liรฉes), et
- Le corps fonctionnel.
Une fonction lambda peut avoir n'importe quel nombre de paramรจtres, mais le corps de la fonction ne peut contenir que UN expression. De plus, un lambda est รฉcrit sur une seule ligne de code et peut รฉgalement รชtre invoquรฉ immรฉdiatement. Vous verrez tout cela en action dans les exemples ร venir.
Syntaxe et exemples
La syntaxe formelle pour รฉcrire une fonction lambda est la suivante :
lambda p1, p2: expression
Ici, p1 et p2 sont les paramรจtres qui sont transmis ร la fonction lambda. Vous pouvez ajouter autant ou peu de paramรจtres que nรฉcessaire.
Notez cependant que nous n'utilisons pas de parenthรจses autour des paramรจtres, contrairement aux fonctions classiques. La derniรจre partie (expression) peut รชtre n'importe quelle expression valide. Python expression qui agit sur les paramรจtres que vous fournissez ร la fonction.
Exemple 1
Maintenant que vous connaissez les lambdas, essayons avec un exemple. Alors, ouvrez votre IDLE et saisissez ce qui suit :
adder = lambda x, y: x + y print (adder (1, 2))
Code Explication
Ici, nous dรฉfinissons une variable qui contiendra le rรฉsultat renvoyรฉ par la fonction lambda.
1. Le mot-clรฉ lambda utilisรฉ pour dรฉfinir une fonction anonyme.
2. x et y sont les paramรจtres que nous transmettons ร la fonction lambda.
3. C'est le corps de la fonction, qui ajoute les 2 paramรจtres que nous avons passรฉs. Notez qu'il s'agit d'une seule expression. Vous ne pouvez pas รฉcrire plusieurs instructions dans le corps d'une fonction lambda.
4. Nous appelons la fonction et imprimons la valeur renvoyรฉe.
Exemple 2
C'รฉtait un exemple simple pour comprendre les principes fondamentaux et la syntaxe des fonctions lambda. Essayons maintenant d'afficher une fonction lambda et d'observer le rรฉsultat. Ouvrez ร nouveau votre IDLE et saisissez ce qui suit :
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
Enregistrez maintenant votre fichier et appuyez sur F5 pour exรฉcuter le programme. C'est le rรฉsultat que vous devriez obtenir.
Sortie :
<function <lambda> at 0x00000185C3BF81E0>
Que se passe-t-il ici ? Examinons le code pour mieux comprendre.
Code Explication:
1. Ici, nous dรฉfinissons un string que vous transmettrez en tant que paramรจtre ร la fonction lambda.
2. Nous dรฉclarons une lambda qui appelle une instruction d'impression et affiche le rรฉsultat.
Mais pourquoi le programme n'affiche-t-il pas la chaรฎne de caractรจres que nous lui transmettons ? C'est parce que la lambda elle-mรชme renvoie un objet fonction. Dans cet exemple, la lambda n'est pas exรฉcutรฉe. appelรฉ par la fonction d'impression mais est simplement retour L'objet fonction et son adresse mรฉmoire sont affichรฉs dans la console.
Exemple 3
Cependant, si vous รฉcrivez un programme comme celui-ci :
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
Exรฉcutez-le en appuyant sur F5, vous verrez un rรฉsultat comme celui-ci.
Sortie :
some kind of a useless lambda
L'expression lambda est maintenant appelรฉe et la chaรฎne de caractรจres transmise s'affiche dans la console. Mais que signifie cette syntaxe รฉtrange et pourquoi la dรฉfinition de l'expression lambda est-elle encadrรฉe par des crochets ? Essayons de comprendre cela.
Code Explication:
1. Voici la mรชme chaรฎne de caractรจres que celle dรฉfinie dans l'exemple prรฉcรฉdent.
2. Dans cette partie, nous dรฉfinissons une fonction lambda et l'appelons immรฉdiatement en lui passant la chaรฎne de caractรจres comme argument. Il s'agit d'une fonction IIFE (Integrated IIFE), dont vous apprendrez davantage dans les sections suivantes de ce tutoriel.
Exemple 4
Prenons un dernier exemple pour comprendre comment les lambdas et les fonctions classiques sont exรฉcutรฉes. Ouvrez donc votre IDLE et dans un nouveau fichier, saisissez ce qui suit :
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
Enregistrez le fichier et appuyez sur F5 pour exรฉcuter le programme. Si vous n'avez commis aucune erreur, le rรฉsultat devrait ressembler ร ceci.
Sortie :
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code Explication:
1. Une fonction appelรฉe guru qui prend une autre fonction comme premier paramรจtre et tous les autres arguments qui suivent.
2. printer_one est une fonction simple qui imprime le paramรจtre qui lui est passรฉ et le renvoie.
3. printer_two est similaire ร printer_one mais sans l'instruction return.
4. Dans cette partie, nous appelons la fonction guru et passons les fonctions d'impression et une chaรฎne de caractรจres comme paramรจtres.
5. Voici la syntaxe pour rรฉaliser la quatriรจme รฉtape (c'est-ร -dire appeler la fonction guru) mais en utilisant des lambdas.
Dans la section suivante, vous apprendrez ร utiliser les fonctions lambda avec map (), rรฉduire() et filtre() in Python.
Utiliser des lambdas avec Python intรฉgrรฉs
Les fonctions Lambda offrent un moyen รฉlรฉgant et puissant d'effectuer des opรฉrations ร l'aide de mรฉthodes intรฉgrรฉes dans Python. C'est possible car les lambdas peuvent รชtre invoquรฉs immรฉdiatement et passรฉs en argument ร ces fonctions.
IIFE en Python Lambda
IIFE qui veut dire exรฉcution de la fonction immรฉdiatement invoquรฉe. Cela signifie qu'une fonction lambda est appelable dรจs sa dรฉfinition. Prenons un exemple pour mieux comprendre ; lancez votre IDLE et saisissez ce qui suit :
(lambda x: x + x)(2)
Voici le rรฉsultat et l'explication du code :
Cette capacitรฉ des lambdas ร รชtre invoquรฉes immรฉdiatement vous permet de les utiliser dans des fonctions comme map() et rรฉduire(). C'est utile car vous ne souhaiterez peut-รชtre plus utiliser ces fonctions.
lambdas dans le filtre()
La fonction de filtre est utilisรฉe pour sรฉlectionner certains รฉlรฉments particuliers dans une sรฉquence d'รฉlรฉments. La sรฉquence peut รชtre n'importe quel itรฉrateur comme des listes, des ensembles, des tuples, etc.
Les รฉlรฉments sรฉlectionnรฉs sont dรฉterminรฉs par une contrainte prรฉdรฉfinie. Cette fonction prend deux paramรจtres :
- Une fonction qui dรฉfinit la contrainte de filtrage
- Une sรฉquence (tout itรฉrateur comme des listes, des tuples, etc.)
Par exemple,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
Voici la sortie:
[10, 8, 7, 5, 11]
Code Explication:
1. Dans la premiรจre instruction, nous dรฉfinissons une liste appelรฉe sรฉquences qui contient des nombres.
2. Ici, nous dรฉclarons une variable appelรฉe filtered_result, qui stockera les valeurs filtrรฉes renvoyรฉes par la fonction filter().
3. Une fonction lambda qui s'exรฉcute sur chaque รฉlรฉment de la liste et renvoie vrai s'il est supรฉrieur ร 4.
4. Imprime le rรฉsultat renvoyรฉ par la fonction de filtre.
lambdas dans la carte()
La fonction map permet d'appliquer une opรฉration particuliรจre ร chaque รฉlรฉment d'une sรฉquence. Comme filter(), elle prend รฉgalement deux paramรจtres :
- Une fonction qui dรฉfinit l'opรฉration ร effectuer sur les รฉlรฉments
- Une ou plusieurs sรฉquences
Par exemple, voici un programme qui imprime les carrรฉs des nombres dans une liste donnรฉe :
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
Sortie :
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code Explication:
1. Ici, nous dรฉfinissons une liste appelรฉe sรฉquences qui contient certains nombres.
2. Nous dรฉclarons une variable appelรฉe filtered_result qui stockera les valeurs mappรฉes.
3. Une fonction lambda qui s'exรฉcute sur chaque รฉlรฉment de la liste et renvoie le carrรฉ de ce nombre.
4. Imprimez le rรฉsultat renvoyรฉ par la fonction map.
lambdas dans rรฉduire()
La fonction de rรฉduction, comme map(), est utilisรฉe pour appliquer une opรฉration ร chaque รฉlรฉment d'une sรฉquence. Cependant, elle diffรจre de la carte dans son fonctionnement. Voici les รฉtapes suivies par la fonction rรฉduire() pour calculer une sortie :
รtape 1) Effectuez l'opรฉration dรฉfinie sur les 2 premiers รฉlรฉments de la sรฉquence.
รtape 2) Enregistrer ce rรฉsultat.
รtape 3) Effectuez l'opรฉration avec le rรฉsultat enregistrรฉ et l'รฉlรฉment suivant dans la sรฉquence.
รtape 4) Rรฉpรฉtez jusquโร ce quโil ne reste plus dโรฉlรฉments.
Il faut รฉgalement deux paramรจtres :
- Une fonction qui dรฉfinit l'opรฉration ร effectuer
- Une sรฉquence (tout itรฉrateur comme des listes, des tuples, etc.)
Par exemple, voici un programme qui renvoie le produit de tous les รฉlรฉments d'une liste :
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
Voici la sortie:
120
Code Explication:
1. Importez reduce depuis le module functools.
2. Ici, nous dรฉfinissons une liste appelรฉe sรฉquences qui contient certains nombres.
3. Nous dรฉclarons une variable appelรฉe produit qui stockera la valeur rรฉduite.
4. Une fonction lambda qui s'exรฉcute sur chaque รฉlรฉment de la liste. Elle renverra le produit de ce nombre, conformรฉment au rรฉsultat prรฉcรฉdent.
5. Imprimez le rรฉsultat renvoyรฉ par la fonction reduce.
Pourquoi (et pourquoi pas) utiliser les fonctions lambda ?
Comme vous le verrez dans la section suivante, les lambdas sont traitรฉes de la mรชme maniรจre que les fonctions normales au niveau de l'interprรจte. D'une certaine maniรจre, on pourrait dire que les lambdas fournissent une syntaxe compacte pour รฉcrire des fonctions qui renvoient une seule expression.
Cependant, il est important de savoir quand utiliser les lambdas et quand les รฉviter. Dans cette section, vous dรฉcouvrirez certains des principes de conception utilisรฉs par Python dรฉveloppeurs lors de l'รฉcriture de lambdas.
L'un des cas d'utilisation les plus courants des lambdas se trouve dans la programmation fonctionnelle, comme Python prend en charge un paradigme (ou un style) de programmation appelรฉ programmation fonctionnelle.
Elle permet de passer une fonction en paramรจtre ร une autre (par exemple, dans `map`, `filter`, etc.). Dans ce cas, l'utilisation des lambdas offre une maniรจre รฉlรฉgante de crรฉer une fonction ponctuelle et de la transmettre comme paramรจtre.
Quand ne faut-il pas utiliser Lambda ?
Vous ne devriez jamais รฉcrire de fonctions lambda compliquรฉes dans un environnement de production. Il sera trรจs difficile pour les codeurs qui maintiennent votre code de le dรฉcrypter. Si vous vous retrouvez ร crรฉer des expressions complexes sur une seule ligne, ce serait une pratique bien supรฉrieure de dรฉfinir une fonction appropriรฉe. En tant que bonne pratique, vous devez vous rappeler quโun code simple est toujours meilleur quโun code complexe.
Fonctions Lambdas et fonctions rรฉguliรจres
Comme indiquรฉ prรฉcรฉdemment, les lambdas sont simplement des fonctions sans identifiant. Autrement dit, ce sont des fonctions anonymes. Voici un tableau illustrant la diffรฉrence entre les lambdas et les fonctions classiques. Python.
| Lambda | Fonctions rรฉguliรจres |
|---|---|
syntaxe:
lambda x : x + x
|
syntaxe:
def (x) : return x + x |
| Les fonctions lambda ne peuvent avoir quโune seule expression dans leur corps. | Les fonctions rรฉguliรจres peuvent avoir plusieurs expressions et instructions dans leur corps. |
| Les lambdas n'ont pas de nom propre. C'est pourquoi on les appelle aussi fonctions anonymes. | Les fonctions rรฉguliรจres doivent avoir un nom et une signature. |
| Les lambdas ne contiennent pas d'instruction return car le corps est automatiquement renvoyรฉ. | Les fonctions qui doivent renvoyer une valeur doivent inclure une instruction return. |
Explication des diffรฉrences
La principale diffรฉrence entre une fonction lambda et une fonction rรฉguliรจre est que la fonction lambda n'รฉvalue qu'une seule expression et gรฉnรจre un objet fonction. Par consรฉquent, nous pouvons nommer le rรฉsultat de la fonction lambda et l'utiliser dans notre programme comme nous l'avons fait dans l'exemple prรฉcรฉdent.
Une fonction rรฉguliรจre pour l'exemple ci-dessus ressemblerait ร ceci :
def adder (x, y): return x + y print (adder (1, 2))
Ici, nous devons dรฉfinir un Le nom pour la fonction qui Retours le rรฉsultat quand nous nous appeler Une fonction lambda ne contient pas d'instruction de retour, car elle ne comporte qu'une seule expression, toujours retournรฉe par dรฉfaut. Il n'est mรชme pas nรฉcessaire d'assigner une lambda, car elle peut รชtre appelรฉe immรฉdiatement (voir la section prรฉcรฉdente). Comme vous le verrez, les lambdas deviennent particuliรจrement puissantes lorsqu'on les utilise avecโฆ Pythonles fonctions intรฉgrรฉes de.
Cependant, vous vous demandez peut-รชtre encore en quoi les lambdas sont diffรฉrents d'une fonction qui renvoie une seule expression (comme celle ci-dessus). Au niveau des interprรจtes, il nโy a pas beaucoup de diffรฉrence. Cela peut paraรฎtre surprenant, mais toute fonction lambda que vous dรฉfinissez dans Python est traitรฉe comme une fonction normale par l'interprรจte.
Au niveau du bytecode, les deux dรฉfinitions sont traitรฉes de la mรชme maniรจre par le Python interprรฉteur. Dรฉsormais, vous ne pouvez plus nommer une fonction lambda car il est rรฉservรฉ par Pythonmais tout autre nom de fonction produira le mรชme bytecode.
