Lambdas thực sự là những cấu trúc rất mạnh mẽ xuất phát từ ý tưởng trong lập trình chức năng và đó là thứ mà không có cách nào dễ dàng sửa đổi, định nghĩa lại hoặc loại bỏ trong tương lai gần của Python. Chúng giúp bạn viết mã mạnh hơn vì nó cho phép bạn truyền các hàm dưới dạng tham số, do đó, ý tưởng về các hàm là công dân hạng nhất.
Lambdas có xu hướng gây nhầm lẫn, nhưng một khi có được sự hiểu biết vững chắc, bạn có thể viết mã thanh lịch sạch sẽ như thế này:
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
Dòng mã trên trả về một danh sách các bình phương của các số trong danh sách. Tất nhiên, bạn cũng có thể làm như sau:
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
Rõ ràng mã cũ ngắn hơn và điều này đặc biệt đúng nếu bạn định sử dụng chức năng bản đồ (hoặc bất kỳ chức năng tương tự nào có chức năng làm tham số) chỉ ở một nơi. Điều này cũng làm cho mã trực quan và thanh lịch hơn.
Ngoài ra, như @David Zaslavsky đã đề cập trong câu trả lời của mình, việc hiểu danh sách không phải lúc nào cũng là cách tốt nhất là nếu danh sách của bạn phải nhận các giá trị từ một cách toán học tối nghĩa.
Từ quan điểm thực tế hơn, một trong những lợi thế lớn nhất của lambdas đối với tôi gần đây là về GUI và lập trình hướng sự kiện. Nếu bạn xem qua các cuộc gọi lại trong Tkinter, tất cả những gì họ lấy làm đối số là sự kiện đã kích hoạt chúng. Ví dụ
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
Bây giờ nếu bạn có một số đối số để vượt qua thì sao? Một cái gì đó đơn giản như truyền 2 đối số để lưu trữ tọa độ của một lần nhấp chuột. Bạn có thể dễ dàng làm điều đó như thế này:
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
Bây giờ bạn có thể lập luận rằng điều này có thể được thực hiện bằng cách sử dụng các biến toàn cục, nhưng bạn có thực sự muốn đập đầu lo lắng về quản lý bộ nhớ và rò rỉ đặc biệt là nếu biến toàn cục sẽ chỉ được sử dụng ở một nơi cụ thể? Đó sẽ chỉ là phong cách lập trình kém.
Nói tóm lại, lambdas là tuyệt vời và không bao giờ nên được đánh giá thấp. Lambdas Python không giống như lambdas LISP (mạnh hơn), nhưng bạn thực sự có thể làm rất nhiều thứ ma thuật với chúng.