1. Định nghĩa hàm Lambda trong Python

Trong Python, hàm Lambda là một hàm ẩn danh và không có tên. Như chúng ta đã biết rằng, để khai báo một hàm thông thường trong Python, ta sẽ sử dụng từ khóa def. Và để khai báo hàm ẩn danh trong Python ta sẽ sử dụng từ khóa lambda.

Ví dụ dưới đây, khai báo một hàm ẩn danh lambda có đối số truyền vào là biến a, trong hàm ẩn danh này sẽ thực hiện phép tính a + 5 như sau:

# Khai bao mot ham an danh co doi so truyen vao la a
x = lambda a : a + 5 # Thuc hien phep tinh a + 5 trong ham an danh

# Truyen gia tri 5 vao ham va hien thi ket qua
print(x(5))

Kết quả:

10

Một số lưu ý khi sử dụng hàm lambda trong Python:

  • Hàm này có thể có bất kỳ số lượng đối số nào nhưng chỉ có một biểu thức, được đánh giá và trả về.
  • Có thể sử dụng hàm lambda bất kỳ vị trí nào trong chương trình
  • Hàm lambda chỉ có một biểu thức duy nhất
  • Hàm lambda có thể nằm trong một hàm def khác

Ví dụ tiếp theo, khai báo và sử dụng hàm ẩn danh lambda với nhiều đối số đầu vào: a, b, c tuy nhiên chỉ thực hiện kiểm tra đánh giá một biểu thức duy nhất:

# Khai bao ham lambda voi 3 doi so: a,b,c
x = lambda a, b, c : a * b * c # Thuc hien tinh a * b * c trong ham lambda

# Truyen 3 gia tri vao ham va hien thi ket qua
print(x(1, 2, 3))

Kết quả:

6

2. Trả về hàm Lambda cho một hàm trong Python

Hàm ẩn danh Lambda sẽ trở nên hữu ích hơn khi sử dụng trong một hàm def. Chúng ta hoàn toàn có thể khởi tạo một hàm def với giá trị trả về là một hàm lambda.

Ví dụ dưới đây, khởi tạo một hàm def với đối số là và trong hàm def này sẽ trả về giá trị là một hàm lambda được sử dụng để tính luỹ thừa a mũ n

# Khoi tao ham power(n)
def power(n):
    # Tra ve ham lambda voi doi so a
    return lambda a : a ** n # Thuc hien phep tinh a luy thua n trong ham lambda
 

# Goi ham power() va truyen n = 2
base = power(2)

# Goi ham base (luc nay la ham lambda) va truyen a = 4 
result = base(4)

# Hien thi ket qua: 4^2 = 16
print(result) 

Kết quả:

16

Giải thích:

  • base = power(2) là câu lệnh gọi hàm power() và truyền vào đối số n = 2 vào hàm. Sau khi gọi hàm, truyền đối số và gán vào biến base – biến base này sẽ được coi là một hàm lambda mới với đối số đầu vào là a (bởi vì hàm power trả về một hàm lambda)
  • result = base(4) là câu lệnh gọi hàm base (thực chất là hàm lambda) và truyền đối số a = 4 vào hàm này. Sau đó hàm này sẽ có đủ cả đối số n, a và thực gán kết quả của phép tính a ** n cho biến result và hiển thị kết quả thông qua biến result này. Ta có a = 4, n= 2 nên kết quả a ** n bằng 4^2 và bằng 16.

3. Sử dụng hàm Lambda trong Python

3.1 Sử dụng hàm Lambda kết hợp với filter()

Hàm filter() bao gồm các tham số truyền vào là một hàm và một list. Hàm này sẽ duyệt qua các phần tử có trong list và sẽ trả về một list – list mới này sẽ chứa các phần tử mà hàm đánh giá là True.

Ví dụ dưới đây sử dụng hàm filter() để lọc ra các số chẵn trong list.

# Khai bao listA ban dau
listA = [1,2,3,4,5,6,7,8,9,10]

# Loc ra cac phan tu trong listA la so chan 
sochan = list(filter(lambda a: (a%2 == 0) , listA))

# Ket qua la mot list voi cac so chan 
print(sochan)

Kết quả:

[2, 4, 6, 8, 10]

3.2 Sử dụng hàm Lambda kết hợp với map()

Hàm map() cũng bao gồm các tham số truyền vào là một hàm và một list. Hàm này khi được gọi sẽ duyệt qua tất cả các phần tử trong list và trả về một list mới chứa các phần tử mang giá trị True/False theo điều kiện lọc ra.

Một ví dụ tương tự, sử dụng hàm map() để lọc ra các số chẵn trong list. Nếu phần tử đó là chẵn thì trả về True, ngược lại trả về False

# Khai bao listA ban dau
listA = [1,2,3,4,5,6,7,8,9,10]

# Tra ve True neu phan tu la so chan, tra ve False neu la so le
sochan = list(map(lambda a: (a%2 == 0) , listA)) 

# Ket qua la mot list cac gia tri True/False
print(sochan)

Kết quả:

[False, True, False, True, False, True, False, True, False, True]