Hướng Dẫn Chi tiết về Hàm Lambda trong Python
Bài viết này sẽ cung cấp cho bạn cái nhìn sâu sắc về cách sử dụng hàm lambda trong Python, bao gồm cú pháp, cách sử dụng thực tế và những điểm hạn chế của nó. Việc nắm vững hàm lambda giúp bạn viết mã Python ngắn gọn, hiệu quả và dễ quản lý hơn.
Hàm Lambda trong Python Là Gì?
Trong ngôn ngữ lập trình Python, hàm lambda là một loại hàm nhỏ, ẩn danh được khai báo bằng từ khóa lambda
. Các hàm này thường được sử dụng để thực hiện các thao tác ngắn gọn, chỉ cần thiết cho một lần sử dụng, trong khi việc định nghĩa một hàm hoàn chỉnh có thể là quá phức tạp.
Tên gọi "hàm ẩn danh" có nghĩa là chúng không cần có tên, mặc dù bạn có thể gán nó cho một biến nếu muốn sử dụng lại. Hàm lambda rất hữu ích trong những trường hợp bạn cần một hàm đơn giản và nhanh chóng trong thời gian ngắn.
Tuy nhiên, đối với các hoạt động phức tạp hơn, khuyến nghị là sử dụng hàm thông thường được định nghĩa bằng def
, vì điều này giúp mã trở nên dễ đọc và bảo trì hơn.
Cú Pháp và Cách Sử Dụng Cơ Bản Của Hàm Lambda
python
lambda arguments: expression
# Để gán tên cho hàm, bạn có thể làm như sau:
function_name = lambda arguments: expression
# Điều này tương đương với:
def function_name(arguments):
return expression
Khác với các hàm thông thường, hàm lambda chỉ có thể chứa một biểu thức duy nhất. Mặc dù bạn có thể truyền vào nhiều đối số, nhưng không thể chứa các câu lệnh hoặc nhiều biểu thức. Hãy cùng xem một vài ví dụ:
Ví Dụ Về Hàm Lambda
python
# Hàm thông thường để tính trung bình của ba số
def average(x, y, z):
return (x + y + z) / 3
# Hàm lambda để tính trung bình của ba số
average = lambda x, y, z: (x + y + z) / 3
Ngoài ra, bạn cũng có thể sử dụng hàm lambda để thực hiện các phép toán hoặc chuyển đổi dữ liệu một cách linh hoạt. Ví dụ dưới đây cho thấy cách kết hợp hai chuỗi và chuyển đổi chúng thành chữ hoa:
python
concat_and_uppercase = lambda str1, str2: (f'The concatenated string is {str1 + str2}'.upper())
print(concat_and_uppercase("hello", "world")) # Kết quả: THE CONCATENATED STRING IS HELLOWORLD
Cách Gọi Hàm Lambda
Có ba cách chính để sử dụng hoặc gọi hàm lambda:
1. Gán cho Một Biến
python
multiply = lambda x, y: print(f'{x} * {y} = {x * y}')
multiply(2, 10) # Kết quả: 2 * 10 = 20
2. Gọi Trực Tiếp Hàm Lambda
python
print((lambda x, y: f'{x} * {y} = {x * y}')(2, 10)) # Kết quả: 2 * 10 = 20
3. Sử Dụng Làm Đối Số Cho Các Hàm Bậc Cao Hơn
Hàm lambda thường được dùng làm đối số cho các hàm bậc cao hơn như map
, filter
, và reduce
, thuận tiện cho việc xử lý dữ liệu trong lập trình hàm.
Sử Dụng Hàm Lambda Với map()
Hàm map
áp dụng một hàm vào mỗi mục trong một iterable và trả về một iterable mới với các mục đã được cập nhật. Cú pháp của hàm map
như sau:
python
map(function, iterable)
Chẳng hạn, hãy xem ví dụ sau:
python
# Danh sách các cặp số
pairs = [(2, 3), (4, 5), (6, 7)]
# Sử dụng hàm lambda với map để nhân từng cặp và in kết quả
list(map(lambda pair: print(f'{pair[0]} * {pair[1]} = {pair[0] * pair[1]}'), pairs))
Sử Dụng Hàm Lambda Với filter()
Hàm filter
cho phép lọc các phần tử trong iterable theo một điều kiện. Chỉ các phần tử trả về True sẽ có mặt trong iterable mới. Cú pháp là:
python
filter(predicate, iterable)
Ví Dụ:
python
# Danh sách tuổi
ages = [25, 30, 18, 42, 17, 50, 22, 19]
# Lọc ra người lớn (từ 18 tuổi trở lên)
adults = filter(lambda age: age >= 18, ages)
print(list(adults)) # Kết quả: [25, 30, 18, 42, 50, 22, 19]
Sử Dụng Hàm Lambda Với reduce()
Hàm reduce
áp dụng một hàm được chỉ định cho các phần tử trong iterable để giảm chúng thành một giá trị duy nhất. Cú pháp như sau:
python
from functools import reduce
reduce(function, iterable)
Ví Dụ:
python
from functools import reduce
# Danh sách các số
numbers = [1, 2, 3, 4, 5]
# Sử dụng reduce với hàm lambda để tính tổng các số
sum_of_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_of_numbers) # Kết quả: 15
Sử Dụng Hàm Lambda Trong Các Trường Hợp Khác
Hàm lambda cũng có thể được sử dụng trong các tình huống khác như sắp xếp danh sách, hoặc trong biểu thức danh sách. Dưới đây là hai ví dụ:
1. Sắp Xếp Danh Sách Chuỗi
python
cities = ["India", "Germany", "America", "Japan"]
sorted_cities = sorted(cities, key=lambda city: city.lower())
print(sorted_cities) # Kết quả: ['America', 'Germany', 'India', 'Japan']
2. Hàm Lambda Trong List Comprehension
python
# Danh sách các số
numbers = [1, 2, 3, 4, 5]
# Sử dụng hàm lambda trong list comprehension để bình phương từng số
squared_numbers = [(lambda x: x ** 2)(x) for x in numbers]
print(squared_numbers) # Kết quả: [1, 4, 9, 16, 25]
Kết Luận
Hàm lambda trong Python là một công cụ mạnh mẽ giúp bạn viết các hàm nhỏ gọn và hiệu quả. Chúng rất hữu ích trong lập trình hàm với các hàm như map
, filter
, và reduce
. Khi sử dụng hàm lambda, bạn nên cân nhắc giữa sự ngắn gọn và khả năng đọc mã—đối với những logic phức tạp, hãy sử dụng hàm thông thường định nghĩa bằng def
để tăng tính dễ hiểu, có thể bảo trì và cung cấp tài liệu cho mã.
Nắm vững hàm lambda sẽ giúp bạn cải thiện tính chất ngắn gọn và hiệu quả cho mã nguồn Python của bạn. Cảm ơn bạn đã đọc bài viết này!
source: viblo