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().

  • (I.e. Mot-clรฉ Lambda : Une lambda s'รฉcrit sous la forme d'arguments lambda : expression, sans dรฉfinition, sans nom et sans instruction de retour explicite.
  • ๐Ÿงฎ Expression unique : Le corps du texte contient exactement une expression dont la valeur est renvoyรฉe automatiquement ; les instructions et les lignes multiples ne sont donc pas autorisรฉes.
  • ๐Ÿ”— Appairage intรฉgrรฉ : Les lambdas sont couramment passรฉes aux fonctions map(), filter(), reduce() et sorted() pour transformer ou sรฉlectionner des รฉlรฉments dans une sรฉquence.
  • | IIFE : Une lambda peut รชtre dรฉfinie et appelรฉe immรฉdiatement en utilisant le modรจle (lambda x: x + x)(2), renvoyant un rรฉsultat immรฉdiatement.
  • ๏ธ Versus def : Les fonctions classiques nรฉcessitent un nom et peuvent contenir de nombreuses instructions, tandis que les lambdas troquent cette puissance contre une syntaxe compacte, sur une seule ligne.
  • ๐Ÿค– Aide ร  l'IA : Les assistants IA tels que GitHub Copilot gรฉnรจrent des expressions lambda pour les clรฉs de mappage, de filtrage et de tri ร  partir d'une courte invite.

Python Fonctions Lambda

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 :

  1. Une fonction qui dรฉfinit l'opรฉration ร  effectuer sur les รฉlรฉments
  2. 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 :

  1. Une fonction qui dรฉfinit l'opรฉration ร  effectuer
  2. 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.

FAQ

Oui. Une fonction lambda peut utiliser une expression conditionnelle telle que `lambda x: 'even' if x % 2 == 0 else 'odd'`. Elle ne peut pas contenir une instruction `if` complรจte, car le corps d'une fonction lambda doit รชtre une expression unique et non un bloc d'instructions.

En gรฉnรฉral, non. La PEP 8 recommande d'utiliser `def` lorsqu'une fonction a besoin d'un nom, car lier une lambda ร  une variable lui donne un nom mais perd en clartรฉ. traceback que def fournit. Les lambdas sont mieux passรฉes directement ร  des fonctions telles que sorted(), map() ou filter().

Non. Au niveau du bytecode Python Cette fonction traite une lambda et une fonction nommรฉe รฉquivalente de la mรชme maniรจre, il n'y a donc aucun gain de vitesse. Une lambda permet seulement d'รฉconomiser une ligne de code ; son exรฉcution n'est pas plus rapide que celle d'une fonction nommรฉe effectuant le mรชme travail.

Oui. Une lambda peut lire des variables de la portรฉe englobante, formant ainsi une fermeture. Attention cependant : la lambda capture la variable elle-mรชme, et non sa valeur actuelle. Il est donc conseillรฉ d'utiliser un argument par dรฉfaut comme `lambda x, n=n: x + n` pour la figer.

Passez une lambda comme argument `key` ร  `sorted()` ou `list.sort()`. Par exemple, `sorted(users, key=lambda u: u['age'])` trie les รฉlรฉments par รขge. La lambda indique : Python quelle valeur comparer pour chaque รฉlรฉment, permettant un tri personnalisรฉ concis sans fonction nommรฉe distincte.

Pas directement, car une lambda anonyme n'a pas de nom auquel se rรฉfรฉrer. On peut contourner ce problรจme en assignant la lambda ร  une variable et en l'appelant par ce nom, mais une fonction `def` classique est le choix le plus clair et recommandรฉ pour la rรฉcursivitรฉ.

Les lambdas permettent des transformations rapides et intรฉgrรฉes dans le code d'IA et d'apprentissage automatique. Les data scientists les utilisent avec pandas.apply(), map() et filter() pour nettoyer ou restructurer les donnรฉes, et comme fonctions clรฉs pour trier les caractรฉristiques, conserverโ€ฆping prรฉtraitement compact au sein de pipelines d'entraรฎnement plus vastes.

GitHub Copilot suggรจre des expressions lambda complรจtes ร  partir d'un court commentaire ou du code environnant, y compris les paramรจtres et l'expression corrects pour les appels ร  `map()`, `filter()` ou `sorted()`. Il peut รฉgalement proposer de convertir une expression lambda verbeuse en une fonction nommรฉe plus claire lorsque la lisibilitรฉ est importante.

Rรฉsumez cet article avec :