Les lambdas sont en fait des constructions très puissantes qui découlent des idées de programmation fonctionnelle, et c'est quelque chose qui ne sera en aucun cas facilement révisé, redéfini ou supprimé dans un proche avenir de Python. Ils vous aident à écrire du code plus puissant car il vous permet de passer des fonctions comme paramètres, d'où l'idée de fonctions en tant que citoyens de première classe.
Les lambdas ont tendance à être déroutants, mais une fois qu'une bonne compréhension est obtenue, vous pouvez écrire du code propre et élégant comme ceci:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
La ligne de code ci-dessus renvoie une liste des carrés des nombres dans la liste. Bien sûr, vous pouvez également le faire comme:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
Il est évident que l'ancien code est plus court, et cela est particulièrement vrai si vous avez l'intention d'utiliser la fonction de carte (ou toute fonction similaire qui prend une fonction comme paramètre) en un seul endroit. Cela rend également le code plus intuitif et élégant.
En outre, comme @David Zaslavsky l'a mentionné dans sa réponse, la compréhension des listes n'est pas toujours la voie à suivre, surtout si votre liste doit obtenir des valeurs d'une manière mathématique obscure.
D'un point de vue plus pratique, l'un des plus grands avantages des lambdas pour moi récemment a été la GUI et la programmation événementielle. Si vous regardez les rappels dans Tkinter, tout ce qu'ils prennent comme arguments est l'événement qui les a déclenchés. Par exemple
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
Et si vous aviez des arguments à passer? Quelque chose d'aussi simple que de passer 2 arguments pour stocker les coordonnées d'un clic de souris. Vous pouvez facilement le faire comme ceci:
def main():
# define widgets and other imp stuff
x, y = None, None
widget.bind("<Button-1>", lambda event: do-something-cool(x, y))
def do-something-cool(event, x, y):
x = event.x
y = event.y
#Do other cool stuff
Vous pouvez maintenant affirmer que cela peut être fait à l'aide de variables globales, mais voulez-vous vraiment vous cogner la tête en vous inquiétant de la gestion de la mémoire et des fuites, surtout si la variable globale ne sera utilisée qu'à un endroit particulier? Ce serait juste un mauvais style de programmation.
En bref, les lambdas sont géniaux et ne devraient jamais être sous-estimés. Les lambdas Python ne sont pas les mêmes que les lambdas LISP (qui sont plus puissants), mais vous pouvez vraiment faire beaucoup de choses magiques avec eux.