Hàm Lambda (Hàm Vô Danh) trong Python
Hàm lambda trong Python là một loại hàm vô danh, nghĩa là chúng không cần tên khi định nghĩa. Các hàm lambda là những hàm nhỏ gọn, chủ yếu được sử dụng cho những tác vụ đơn giản và thường được áp dụng khi cần một hàm tạm thời cho các tình huống nhất định. Hàm lambda có thể nhận nhiều tham số nhưng chỉ có một biểu thức trả về.

1. Cú pháp của hàm Lambda
Cú pháp cơ bản của một hàm lambda như sau:
lambda arguments: expression
-
lambda
: Từ khóa để khai báo hàm vô danh. -
arguments
: Các tham số đầu vào của hàm (tương tự như tham số trong hàm thông thường). -
expression
: Biểu thức mà hàm trả về. Biểu thức này phải có giá trị trả về ngay lập tức và không thể có câu lệnh nhưif
,else
, hoặc vòng lặp.
Ví dụ về hàm lambda cơ bản:
# Hàm lambda cộng hai số
add = lambda x, y: x + y
print(add(5, 3)) # In ra 8
Giải thích:
- Hàm lambda này nhận vào hai tham số
x
vày
, và trả về kết quả là tổng của chúng (x + y
). - Chúng ta gán hàm lambda vào biến
add
và gọiadd(5, 3)
để in ra kết quả.
2. Ưu điểm của hàm Lambda
-
Gọn nhẹ và dễ hiểu: Hàm lambda giúp bạn viết mã ngắn gọn hơn, đặc biệt khi cần các hàm đơn giản cho các phép toán nhỏ hoặc khi sử dụng với các hàm như
map()
,filter()
, hoặcsorted()
. - Không cần định nghĩa hàm riêng biệt: Bạn có thể sử dụng hàm lambda trực tiếp trong các biểu thức mà không cần phải khai báo một hàm thông thường.
3. Các ứng dụng của hàm Lambda
Sử dụng với map()
Hàm map()
cho phép áp dụng một hàm cho tất cả các phần tử trong một iterable (như danh sách). Hàm lambda có thể được sử dụng để xác định hàm áp dụng cho các phần tử đó.
numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # In ra [1, 4, 9, 16]
Giải thích:
- Hàm
map()
áp dụng hàm lambda (lambda x: x ** 2
) cho từng phần tử trong danh sáchnumbers
, và trả về một danh sách các giá trị bình phương.
Sử dụng với filter()
Hàm filter()
được sử dụng để lọc các phần tử trong một iterable dựa trên một hàm điều kiện. Hàm lambda có thể dùng để chỉ định điều kiện lọc.
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # In ra [2, 4, 6]
Giải thích:
- Hàm
filter()
lọc ra các số chẵn từ danh sáchnumbers
bằng cách sử dụng hàm lambda để kiểm tra tính chẵn của mỗi phần tử.
Sử dụng với sorted()
Hàm sorted()
có thể sử dụng một hàm lambda làm tham số key
để xác định cách sắp xếp.
students = [("John", 25), ("Jane", 22), ("Mike", 23)]
students_sorted = sorted(students, key=lambda x: x[1])
print(students_sorted) # In ra [('Jane', 22), ('Mike', 23), ('John', 25)]
Giải thích:
- Trong ví dụ này, hàm
sorted()
được dùng để sắp xếp danh sáchstudents
theo tuổi của các sinh viên, sử dụng hàm lambda (lambda x: x[1]
) để trích xuất tuổi từ mỗi tuple.
4. Sự khác biệt giữa hàm Lambda và hàm thông thường
-
Hàm Lambda:
- Không cần tên.
- Chỉ có một biểu thức duy nhất.
- Có thể gán cho biến hoặc sử dụng trực tiếp.
-
Hàm thông thường (được khai báo bằng
def
):- Cần có tên hàm.
- Có thể chứa nhiều câu lệnh và logic phức tạp hơn.
- Có thể có nhiều câu lệnh
return
.
Ví dụ so sánh:
# Hàm thông thường
def add(x, y):
return x + y
# Hàm lambda
add_lambda = lambda x, y: x + y
print(add(2, 3)) # In ra 5
print(add_lambda(2, 3)) # In ra 5
Giải thích:
- Cả hai hàm thực hiện cùng một tác vụ, nhưng hàm lambda gọn gàng hơn và không cần khai báo tên hàm.
5. Hạn chế của hàm Lambda
- Chỉ có một biểu thức: Hàm lambda không thể chứa nhiều câu lệnh hoặc logic phức tạp.
- Không dễ đọc: Mặc dù hàm lambda có thể giúp mã gọn gàng, nhưng đối với các tác vụ phức tạp, việc sử dụng hàm thông thường sẽ dễ hiểu hơn.
Kết luận
Hàm lambda là một công cụ mạnh mẽ trong Python, đặc biệt khi bạn cần các hàm ngắn gọn và đơn giản. Tuy nhiên, chúng cũng có hạn chế nhất định và không phù hợp với các tác vụ phức tạp. Việc sử dụng hàm lambda thích hợp có thể giúp bạn viết mã dễ hiểu và tiết kiệm thời gian.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com