Le lambda sono in realtà costrutti molto potenti che derivano da idee nella programmazione funzionale, ed è qualcosa che in nessun modo sarà facilmente rivisto, ridefinito o rimosso nel prossimo futuro di Python. Ti aiutano a scrivere codice più potente in quanto ti consente di passare funzioni come parametri, quindi l'idea di funzioni come cittadini di prima classe.
Le lambda tendono a diventare confuse, ma una volta ottenuta una solida comprensione, puoi scrivere un codice pulito ed elegante come questo:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
La riga di codice sopra restituisce un elenco dei quadrati dei numeri nell'elenco. Naturalmente, potresti anche farlo come:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
È ovvio che il codice precedente è più breve, e questo è particolarmente vero se si intende utilizzare la funzione map (o qualsiasi funzione simile che accetta una funzione come parametro) in un solo posto. Questo rende anche il codice più intuitivo ed elegante.
Inoltre, come ha menzionato @David Zaslavsky nella sua risposta, la comprensione della lista non è sempre la strada da percorrere, specialmente se la tua lista deve ottenere valori da un oscuro modo matematico.
Da un punto di vista più pratico, uno dei maggiori vantaggi di lambdas per me recentemente è stato nella GUI e nella programmazione guidata dagli eventi. Se dai un'occhiata ai callback in Tkinter, tutti prendono come argomenti sono l'evento che li ha innescati. Per esempio
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
E se avessi qualche argomento da passare? Qualcosa di semplice come passare 2 argomenti per memorizzare le coordinate di un clic del mouse. Puoi farlo facilmente in questo modo:
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
Ora puoi sostenere che questo può essere fatto usando variabili globali, ma vuoi davvero sbatterti la testa preoccupandoti della gestione della memoria e delle perdite, specialmente se la variabile globale verrà utilizzata in un determinato posto? Sarebbe solo uno stile di programmazione scadente.
In breve, le lambda sono fantastiche e non dovrebbero mai essere sottovalutate. I lambda di Python non sono uguali ai lambda di LISP (che sono più potenti), ma puoi davvero fare un sacco di cose magiche con loro.