Các hàm lambda là các hàm ẩn danh chỉ có thể chứa một biểu thức.
Bạn có thể nghĩ rằng các hàm lambda là một tính năng trung cấp hoặc nâng cao, nhưng ở đây bạn sẽ tìm hiểu cách bạn có thể dễ dàng bắt đầu sử dụng chúng trong mã của mình.
Trong Python, các hàm thường được tạo như sau:
def my_func(a):
# function body
Bạn khai báo chúng với def
từ khóa, đặt tên cho chúng, sau đó thêm danh sách các đối số được bao quanh bởi dấu ngoặc tròn. Có thể có nhiều dòng mã, với bao nhiêu câu lệnh và biểu thức mà bạn cần bên trong.
Nhưng đôi khi bạn có thể cần một hàm chỉ có một biểu thức bên trong, chẳng hạn như một hàm nhân đôi đối số của nó:
def double(x):
return x*2
Đây là một chức năng mà bạn có thể sử dụng, ví dụ, với map
phương pháp.
def double(x):
return x*2
my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(double, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]
Đây sẽ là một nơi tốt để sử dụng hàm lambda, vì nó có thể được tạo chính xác ở nơi bạn cần sử dụng. Điều này có nghĩa là sử dụng ít dòng mã hơn và bạn có thể tránh tạo một hàm được đặt tên chỉ được sử dụng một lần (và sau đó phải được lưu trữ trong bộ nhớ).
Cách sử dụng hàm lambda trong Python
Bạn sử dụng các hàm lambda khi bạn cần một hàm nhỏ trong thời gian ngắn – ví dụ: làm đối số của hàm bậc cao hơn như map
hoặc filter
.
Cú pháp của hàm lambda là lambda args: expression
. Đầu tiên bạn viết từ lambda
sau đó là một khoảng trắng, sau đó là danh sách tất cả các đối số được phân tách bằng dấu phẩy, tiếp theo là dấu hai chấm và sau đó là biểu thức là phần thân của hàm.
Lưu ý rằng bạn không thể đặt tên cho các hàm lambda vì chúng ẩn danh (không có tên) theo định nghĩa.
Một hàm lambda có thể có bao nhiêu đối số mà bạn cần sử dụng, nhưng phần thân phải là một biểu thức duy nhất.
ví dụ 1
Ví dụ: bạn có thể viết một hàm lambda nhân đôi đối số của nó: lambda x: x*2
và sử dụng nó với map
chức năng nhân đôi tất cả các phần tử trong danh sách:
my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(lambda x: x*2, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]
Lưu ý sự khác biệt giữa chức năng này và chức năng chúng tôi đã viết ở trên với double
chức năng. Cái này nhỏ gọn hơn và không có chức năng bổ sung nào chiếm dung lượng trong bộ nhớ.
ví dụ 2
Hoặc bạn có thể viết một hàm lambda để kiểm tra xem một số có dương không, chẳng hạn như lambda x: x > 0
và sử dụng nó với filter
để tạo một danh sách chỉ các số dương.
my_list = [18, -3, 5, 0, -1, 12]
new_list = list(filter(lambda x: x > 0, my_list))
print(new_list) # [18, 5, 12]
Hàm lambda được xác định nơi nó được sử dụng, theo cách này, không có hàm được đặt tên trong bộ nhớ. Nếu một chức năng được sử dụng, tôi chỉ ở một nơi thì nên sử dụng chức năng lambda để tránh lộn xộn.
ví dụ 3
Bạn cũng có thể trả về hàm lambda từ một hàm.
Nếu bạn cần tạo nhiều hàm nhân các số, chẳng hạn như nhân đôi hoặc nhân ba, v.v., lambda có thể giúp bạn.
Thay vì tạo nhiều hàm, bạn có thể tạo một hàm multiplyBy
như bên dưới, sau đó gọi hàm này nhiều lần với các đối số khác nhau để tạo các hàm nhân đôi, nhân ba, v.v.
def muliplyBy (n):
return lambda x: x*n
double = multiplyBy(2)
triple = muliplyBy(3)
times10 = multiplyBy(10)
Hàm lambda nhận giá trị n
từ chức năng cha mẹ, do đó trong double
giá trị của n
Là 2
Trong triple
nó là 3
và trong times10
nó là 10
. Bây giờ gọi các hàm này với một đối số sẽ nhân số đó.
double(6)
> 12
triple(5)
> 15
times10(12)
> 120
Nếu bạn không sử dụng hàm lambda ở đây, bạn sẽ cần xác định một hàm khác bên trong multiplyBy
một cái gì đó giống như dưới đây:
def muliplyBy (x):
def temp (n):
return x*n
return temp
Sử dụng hàm lambda sử dụng một nửa số dòng và làm cho nó dễ đọc hơn.
Phần kết luận
Hàm lambda là một cách viết hàm nhỏ gọn nếu hàm của bạn chỉ bao gồm một biểu thức nhỏ. Chúng thường không phải là thứ mà các lập trình viên mới bắt đầu sử dụng, nhưng ở đây bạn đã thấy cách bạn có thể dễ dàng sử dụng chúng ở mọi cấp độ.