960 votes

Python Lambda - pourquoi ?

Je viens de commencer Python et je me suis retrouvé nez à nez avec Lambda, ce qui m'a pris un certain temps à comprendre. Lambda fait-il partie de ces éléments de langage "intéressants" qu'il faut oublier dans la vie réelle ? Je suis sûr qu'il y a des cas limites où il peut être nécessaire, mais étant donné son obscurité, la possibilité qu'il soit redéfini dans les prochaines versions (mon hypothèse basée sur les diverses définitions de celui-ci) et la clarté réduite du codage - devrait-on l'éviter ? Cela me rappelle le débordement (buffer overflow) des types C - pointer vers la variable supérieure et surcharger pour définir les valeurs des autres champs... une sorte de spectacle technique mais un cauchemar pour les codeurs de maintenance...

1040voto

David Z Points 49476

Parlez-vous des fonctions lambda ? Comme

f = lambda x: x**2 + 2*x - 5

Ces choses sont en fait assez utiles. Python supporte un style de programmation appelé programmation fonctionnelle où vous pouvez passer des fonctions à d'autres fonctions pour faire des choses. Exemple :

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

fixe mult3 à [3, 6, 9] les éléments de la liste originale qui sont des multiples de 3, ce qui est plus court (et, pourrait-on dire, plus clair) que

def filterfunc(x):
    return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

Bien sûr, dans ce cas particulier, vous pourriez faire la même chose avec une compréhension de liste :

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(ou même comme range(3,10,3) ) mais il y a d'autres cas, comme la construction de fonctions en tant que valeurs de retour d'autres fonctions, où vous ne pouvez pas utiliser une liste de compréhension et où une fonction lambda peut être le moyen le plus court d'écrire quelque chose. Comme

def transform(n):
    return lambda x: x + n
f = transform(3)
f(4) # is 7

J'utilise régulièrement les fonctions lambda. Il m'a fallu un certain temps pour m'y habituer, mais une fois que je l'ai fait, je suis content que Python en dispose ;-)

388voto

user251650 Points 371

lambda est juste une façon élégante de dire function . En dehors de son nom, il n'a rien d'obscur, d'intimidant ou de cryptique. Lorsque vous lisez la ligne suivante, remplacez lambda par function dans votre esprit :

>>> f = lambda x: x + 1
>>> f(3)
4

Il définit simplement une fonction de x . D'autres langues, comme R dites-le explicitement :

> f = function(x) { x + 1 }
> f(3)
4

Vous voyez ? C'est l'une des choses les plus naturelles à faire en programmation.

109voto

John Fouhy Points 14700

Le résumé en deux lignes :

  1. Fermetures : Très utile. Apprenez-les, utilisez-les, aimez-les.
  2. Python lambda Mot clé : inutile, occasionnellement utile. Si vous vous retrouvez à faire quoi que ce soit d'un peu complexe avec elle, rangez-la et définissez une vraie fonction.

72voto

egaga Points 5367

Un lambda fait partie d'un mécanisme d'abstraction très important qui traite des fonctions d'ordre supérieur. Pour bien comprendre sa valeur, veuillez regarder les leçons de haute qualité de Abelson et Sussman et lire le livre SICP

Il s'agit là de questions pertinentes dans le secteur moderne des logiciels, et qui deviennent de plus en plus populaires.

60voto

rhettg Points 1452

Je doute que Lambda disparaisse. Voir Le message de Guido pour finalement abandonner l'idée de l'enlever. Voir aussi un aperçu du conflit .

Vous pouvez consulter cet article pour en savoir plus sur l'historique des fonctionnalités de Python : http://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html

Curieusement, les fonctions map, filter et reduce qui ont motivé à l'origine l'introduction de lambda et d'autres fonctionnalités ont été, dans une large mesure, supplantées par les compréhensions de listes et les expressions génératrices. En fait, la fonction reduce a été retirée de la liste des fonctions intégrées dans Python 3.0. (Cependant, il n'est pas nécessaire de se plaindre de la suppression de lambda, map ou filter : ils restent :-)

Mes deux centimes : Il est rare que lambda en vaille la peine en termes de clarté. Il existe généralement une solution plus claire qui n'inclut pas lambda.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X