Lambda to tak naprawdę bardzo potężne konstrukcje, które wynikają z pomysłów w programowaniu funkcjonalnym, i jest to coś, co w żadnym wypadku nie będzie łatwe do poprawienia, przedefiniowania lub usunięcia w najbliższej przyszłości Pythona. Pomagają Ci pisać kod, który jest potężniejszy, ponieważ pozwala przekazywać funkcje jako parametry, a tym samym ideę funkcji jako obywateli pierwszej klasy.
Jagnięta często się mylą, ale po uzyskaniu solidnego zrozumienia możesz napisać czysty elegancki kod w następujący sposób:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
Powyższy wiersz kodu zwraca listę kwadratów liczb na liście. Oczywiście możesz to również zrobić w następujący sposób:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
Oczywiste jest, że poprzedni kod jest krótszy, a jest to szczególnie prawdziwe, jeśli zamierzasz używać funkcji mapy (lub dowolnej podobnej funkcji, która przyjmuje funkcję jako parametr) tylko w jednym miejscu. Dzięki temu kod jest bardziej intuicyjny i elegancki.
Ponadto, jak wspomniał Dawid Zasławski w swojej odpowiedzi, zrozumienie listy nie zawsze jest właściwą drogą, szczególnie jeśli twoja lista musi uzyskać wartości z niejasnej matematyki.
Z bardziej praktycznego punktu widzenia jedną z największych zalet lambdas było ostatnio GUI i programowanie oparte na zdarzeniach. Jeśli spojrzysz na wywołania zwrotne w Tkinter, wszystko, co biorą za argument, to zdarzenie, które je wywołało. Na przykład
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
A co jeśli masz jakieś argumenty do przekazania? Coś tak prostego, jak przekazanie 2 argumentów do przechowywania współrzędnych kliknięcia myszy. Możesz to łatwo zrobić w następujący sposób:
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
Teraz możesz argumentować, że można to zrobić za pomocą zmiennych globalnych, ale czy naprawdę chcesz uderzyć głową, martwiąc się o zarządzanie pamięcią i wyciek, szczególnie jeśli zmienna globalna będzie używana tylko w jednym konkretnym miejscu? To byłby kiepski styl programowania.
Krótko mówiąc, lambdas są niesamowite i nigdy nie należy ich lekceważyć. Jednak lambda Pythona to nie to samo, co lambda LISP (które są mocniejsze), ale naprawdę można z nimi zrobić wiele magicznych rzeczy.