2.1 Định nghĩa lambda function
Lambda function, còn được gọi là hàm vô danh, là
những hàm gọn nhẹ trên một dòng không có tên, có thể
được tạo ra bằng cách sử dụng từ khóa lambda
.
Không giống như các hàm thông thường được định nghĩa bằng
def
, lambda function được tạo ra ngay tại chỗ và thường
được sử dụng cho những thao tác đơn giản trên một dòng.
Cú pháp của lambda function gồm từ khóa
lambda
, theo sau là các đối số, dấu hai chấm và
biểu thức:
lambda đối số: biểu thức
Lambda function có thể nhận bất kỳ số lượng đối số nào, nhưng chỉ có thể chứa một biểu thức duy nhất. Giá trị của biểu thức này được trả về tự động.
Ví dụ:
Lambda function | Hàm thông thường |
---|---|
|
|
|
|
|
|
2.2 Ứng dụng của lambda function
Lambda function thường được sử dụng kết hợp với các hàm khác,
như map()
, filter()
và
sorted()
, cũng như làm đối số cho các hàm khác.
Sử dụng với map()
Hàm map()
áp dụng một hàm đã định nghĩa cho mỗi phần tử
của một đối tượng có thể lặp qua và trả về một trình lặp với các kết quả.
Lambda function rất thích hợp để sử dụng với map()
,
bởi vì nó cho phép xác định ngắn gọn một hàm để chuyển đổi
các phần tử.
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # Kết quả: [1, 4, 9, 16, 25]
Sử dụng với filter()
Hàm filter()
trả về một trình lặp gồm các
phần tử của một đối tượng có thể lặp qua, mà hàm đã định nghĩa
trả về True. Lambda function cho phép xác định nhanh chóng điều kiện lọc.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Kết quả: [2, 4, 6, 8, 10]
Sử dụng với sorted()
Hàm sorted()
sắp xếp các phần tử của một đối tượng có thể lặp qua.
Lambda function có thể sử dụng để xác định tiêu chí sắp xếp tùy chỉnh thông qua đối số key
.
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # Kết quả: ['date', 'apple', 'banana', 'cherry']
Lambda function trong các biểu thức
Lambda function có thể được sử dụng trong các biểu thức khác, như comprehensions của danh sách và generators của từ điển.
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # Kết quả: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
2.3 Hạn chế của lambda function
Lambda function có một số hạn chế so với các hàm thông thường:
Giới hạn bởi biểu thức:
Lambda function chỉ có thể chứa một biểu thức duy nhất và không thể bao gồm
các câu lệnh phức tạp như vòng lặp hay các câu lệnh điều khiển
(ví dụ: if
, else
v.v.).
Thiếu tài liệu:
Lambda function không thể chứa các chuỗi tài liệu (docstring), điều này làm khó khăn cho việc tài liệu hóa chức năng của chúng.
Khả năng debug hạn chế:
Do thiếu tên và tài liệu, lambda function khó debug hơn so với các hàm thông thường.
Ví dụ hạn chế của lambda function
Cố gắng sử dụng nhiều biểu thức trong một lambda function sẽ dẫn đến lỗi cú pháp:
# Mã này sẽ gây ra lỗi
invalid_lambda = lambda x: x ** 2; print(x)
GO TO FULL VERSION