Hàm Lambda (Hàm Vô Danh) trong Python

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 2 tháng 2, 2025

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ố xy, 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ọi add(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ặc sorted().
  • 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ách numbers, 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ách numbers 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ách students 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.

Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ