Na verdade, os lambdas são construções muito poderosas que derivam de idéias em programação funcional, e é algo que nunca será facilmente revisado, redefinido ou removido no futuro próximo do Python. Eles ajudam a escrever um código mais poderoso, pois permite passar funções como parâmetros, assim, a idéia de funções como cidadãos de primeira classe.
As lambdas tendem a ficar confusas, mas depois que um entendimento sólido é obtido, você pode escrever um código limpo e elegante como este:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
A linha de código acima retorna uma lista dos quadrados dos números na lista. Claro, você também pode fazê-lo como:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
É óbvio que o código anterior é mais curto, e isso é especialmente verdadeiro se você pretende usar a função map (ou qualquer função semelhante que utilize uma função como parâmetro) em apenas um local. Isso também torna o código mais intuitivo e elegante.
Além disso, como @David Zaslavsky mencionou em sua resposta, a compreensão da lista nem sempre é o caminho a percorrer, especialmente se sua lista precisa obter valores de alguma maneira matemática obscura.
Do ponto de vista mais prático, uma das maiores vantagens das lambdas para mim recentemente foi na GUI e na programação orientada a eventos. Se você der uma olhada nos retornos de chamada no Tkinter, todos eles tomam como argumentos o evento que os acionou. Por exemplo
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
Agora, e se você tivesse alguns argumentos para passar? Algo tão simples como passar 2 argumentos para armazenar as coordenadas de um clique do mouse. Você pode facilmente fazer assim:
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
Agora você pode argumentar que isso pode ser feito usando variáveis globais, mas você quer realmente se preocupar com gerenciamento de memória e vazamento, especialmente se a variável global for usada apenas em um local específico? Isso seria apenas um estilo de programação ruim.
Em resumo, as lambdas são impressionantes e nunca devem ser subestimadas. Os lambdas Python não são os mesmos que os lambdas LISP (que são mais poderosos), mas você pode realmente fazer muitas coisas mágicas com eles.