Vậy thì chúng ta nên xem xét hàm lambda
sinh ra để làm gì? Đa số trong các ngôn ngữ lập trình, hàm lambda
được tạo ra để biểu diễn các hàm số đơn giản một cách ngắn gọn hơn, vì muốn biểu diễn ngắn gọn một hàm số đơn giản cho nên khả năng của hàm lambda
cũng rất hạn chế, đối với những hàm số phức tạp, bạn không thể sử dụng hàm lambda
để biểu diễn được.
Những trường hợp nên sử dụng hàm lambda trong Python:
Trả về một hàm số trong một hàm số (thuật ngữ tiếng Anh gọi là Closure)
Ví dụ chương trình trả về hàm số tăng từ số ban đầu sử dụng lambda
theo Docs Python là,
def ham_tang(n):
return lambda x: x + n
f = ham_tang(10)
f(0) = 10
f(1) = 11
f(2) = 12
Nếu bạn viết ham_tang
trên mà sử dụng hàm bình thường thì sẽ dài dòng hơn khi dùng hai hàm lồng vào nhau hoặc khối lượng tham số truyền vào nhiều hơn, ví dụ trên mình có thể viết lại bình thường như sau,
def ham_tang(x, n):
return x + n
ham_tang(10, 0) # = 10
ham_tang(10, 1) # = 11
ham_tang(10, 2) # = 12
Có thể dùng hàm
lambda
làmkey
để lọc, lấy hoặc tính toán các phần tử thỏa mãn một điều kiện nào đó trong các cấu trúclist
,dict
, ...
Ví dụ chỉ lấy ra các phần tử chẵn và lớn hơn 3 của mảng,
result = filter(lambda x: x % 2 == 0 and x > 3, [5, 2, 6, 4, 1, 9, 7])
print result # = [6, 4]
Và tất nhiên có thể sử dụng hàm
lambda
để biểu diễn những hàm số nhỏ và đơn giản khác nếu như bạn muốn.
Ví dụ hàm số bình phương một số,
# Hàm bình thường
def binh_phuong(a):
return a**2
print binh_phuong(3) # = 9
# Hàm sử dụng lambda
f = lambda x: x**2
print f(3) # = 9
f(3) == binh_phuong(3) # True