Xem thêm

Hàm Lambda trong Python

Huy Erick
Hàm lambda là một trong những tính năng thông minh thường được sử dụng khi lập trình Python - loại ngôn ngữ được sử dụng rất nhiều trong lĩnh vực lập trình, học máy, khoa...

Hàm lambda là một trong những tính năng thông minh thường được sử dụng khi lập trình Python - loại ngôn ngữ được sử dụng rất nhiều trong lĩnh vực lập trình, học máy, khoa học dữ liệu,… Bài viết dưới đây sẽ giúp bạn có cái nhìn tổng quát về hàm lambda trong lập trình Python.

Đặc điểm của biểu thức Lambda trong Python

Đặc điểm của hàm Lambda trong Python là gì? Để nhận diện hàm lambda, bạn cần biết đến một số đặc điểm dưới đây:

  • Trong nội dung hàm lambda chỉ chứa biểu thức, không bao hàm các câu lệnh.
  • Hàm lambda được viết trong 1 dòng thực thi duy nhất.
  • Hàm lambda cũng có thể gọi ngay lập tức (IIFE).
  • Hàm lambda không hỗ trợ chú thích kiểu.

Một đối tượng hàm bình thường sẽ được định nghĩa bằng def. Với hàm lambda python, tất cả các cách truyền đối số khác nhau được hỗ trợ. Các loại đối số được hỗ trợ tổng hàm lambda bao gồm:

  • Đối số vị trí
  • Đối số được đặt tên (đối số từ khóa)
  • Danh sách biến đối số (còn được gọi là varargs)
  • Danh sách biến các đối số từ khóa
  • Đối số chỉ từ khóa

Hàm Anonymous hoặc Lambda trong Python là gì?

Hàm lambda Python được gọi là một hàm ẩn danh, được định nghĩa và có chức năng đầy đủ nhưng không có tên hoặc danh tiếng. Thông thường, để xác định một hàm bình thường trong Python, bạn sẽ yêu cầu từ khóa def. Còn hàm lambda sẽ cần keyword lambda để định nghĩa.

hàm lamda là gì

Dưới đây sẽ là ví dụ minh họa sự khác nhau giữa một hàm thông thường và một hàm Lambda trong ngôn ngữ lập trình Python:

# Hàm thông thường
def a_name(x):
   return x + x

# Hàm Lambda
lambda x: x + x

2 đoạn code trên đang thực hiện cùng một nhiệm vụ và trả về một kết quả giống nhau. Tuy nhiên, có thể thấy hàm lambda hoạt động linh hoạt và dễ sử dụng hơn hẳn. Do đó, hàm lambda python thường được sử dụng để tinh giản đoạn code với các hoạt động logic cơ bản nhất. Hàm lambda đặc biệt phù hợp với những trường hợp sử dụng chức năng một lần.

Cú pháp và cách sử dụng các hàm Lambda trong Python

Vậy là bạn đã hiểu được cơ bản về sự khác biệt giữa hàm thông thường và hàm lambda. Bạn có thể xác định hàm thông thường và hàm ẩn danh bằng cách sử dụng từ khóa trong hàm lambda.

Một hàm Python sẽ có một cú pháp tiếp theo. Do đó, có thể xác định rằng hàm lambda có thể sử dụng với mọi số lượng đối số, duy chỉ hoạt động trên 1 biểu thức duy nhất.

Cú pháp hàm lambda quy định là:

lambda arguments: expression

cú pháp hàm lambda

Biểu thức đơn sẽ được đánh giá dựa trên nhiều đối số và các giá trị của nó ngay sau khi các đánh giá được trả về:

VD1: Hàm Lambda bên dưới thêm 2 vào bất kỳ đối số nhất định nào

lambda x: x + 2

Nếu bạn muốn áp dụng hàm lambda trên chỉ cho đối số mà bạn chọn, bạn có thể viết dấu ngoặc đơn vào hàm và viết đối số bắt buộc bên cạnh.

(lambda x: x + 2)(4)

Hàm Lambda ở trên nhận đối số “4”, thêm 2 vào đối số và cung cấp “6” làm đầu ra.

Bạn hoàn toàn có thể gán tên cho hàm lambda bởi đây là các biểu thức:

AddTwo = lambda x: x + 2
AddTwo(4)

Đoạn mã cho kết quả sau:

6

Hàm Lambda Python hoạt động giống như hàm Python bình thường sau:

def add_two(x):
   return x + 2

Bạn hãy luôn ghi nhớ rằng hàm lambda không thể chứa các câu lệnh khi hoạt động. Do đó, việc sử dụng các câu lệnh pass, return, define,… sẽ tạo lỗi SyntaxError cho đoạn code của bạn.

Lambda python

Để có thể sử dụng hàm lambda một cách thành thạo, hãy đảm bảo bạn đủ kiến thức để sử dụng trong những trường hợp tối ưu nhất. Bạn cần phải nắm rõ được các tình huống có thể dùng hàm lambda thay cho hàm bình thường.

Một trường hợp khá phổ biến là trong lập trình hàm, khi người lập trình được đoạn mã yêu cầu sử dụng một chức năng không tên trong một thời gian ngắn. Hàm lambda sẽ là lựa chọn tốt nhất cho trường hợp này.

Các hàm Lambda phổ biến trong Python

Hàm Lambda trong ngôn ngữ lập trình Python được sử dụng để làm đối số cho một hàm bậc cao hơn. Hàm bậc cao hơn - Higher Order Function - được hiểu đơn giản là một hàm có thể sử dụng các hàm khác làm đối số.

Trong đó, 3 loại hàm bậc cao hơn dưới đây thường được người lập trình sử dụng hàm Lambda làm tham số.

Sử dụng các hàm Lambda làm Đối số với Filter ()

Trong ngôn ngữ lập trình Python, hàm filter() cho bạn nhận một hàm cùng một danh sách làm đối số. Hàm này sẽ chạy và trả về một danh sách đối số có chứa các giá trị true lọc từ danh sách ban đầu.

Hàm Lambda làm đối số với map ()

Ví dụ trình bày cách hoạt động của hàm filter () và lọc ra các số chẵn từ danh sách đầu vào:

MyList = [7, 1, 2, 8, 17, 3, 10, 14]
NewList = list(filter(lambda x: (x%2 == 0), MyList))
print(NewList)

Đoạn mã trên tận dụng hàm Python Lambda làm đối số để thực hiện lọc được yêu cầu và xuất ra kết quả sau:

[2, 8, 10, 14]

Sử dụng các hàm Lambda làm đối số với map ()

Hàm map() hoạt động trên một danh sách và nhận một hàm làm đối số cùng với danh sách, giống với hàm filter() trong Python. Các lập trình viên sử dụng hàm map() để lọc ra một danh sách mới có chứa các mục hàm đầu vào đó trả về cho từng mục ở trong danh sách ban đầu.

Hàm Lambda làm đối số với map ()

Ví dụ trình bày cách hoạt động của hàm map () để nhập một danh sách có chứa các giá trị nhân đôi của tất cả các giá trị có trong danh sách ban đầu ở đầu ra.

MyList = [3, 4, 5, 9, 8, 7, 11, 13]
NewList = list(map(lambda x: x * 2 , MyList))
print(NewList)

Hàm Lambda được cung cấp dưới dạng một đối số thực hiện phép tính bắt buộc và trả về kết quả sau:

[6, 8, 10, 18, 16, 14, 22, 26]

Sử dụng các hàm Lambda làm Đối số với Reduce ()

Hàm reduce() hoạt động bằng cách nhận một hàm Lambda cùng một danh sách các giá trị để làm đối số. Hàm Lambda trong trường hợp này sẽ có nhiệm vụ thực hiện quá trình lặp lại các cặp giá trị có trong danh sách đầu vào và trả về một danh sách đã được rút gọn.

Ví dụ trình bày cách hoạt động của hàm Reduce () cùng với hàm lambda để tính tổng của danh sách đầu vào.

from functools import reduce
lis = [12, 5, 20, 10, 200, 70]
sum = reduce((lambda x, y: x + y), lis)
print(sum)

Mã sẽ cung cấp cho bạn kết quả sau:

317

Kiểm tra Lambda trong Python

Cách kiểm tra hàm lambda trong python về cơ bản giống với các hàm thông thường khác. Bạn có thể sử dụng unittestdoctest.

unittest

Các module unittest xử lý các hàm lambda giống với chức năng thường xuyên:

import unittest
addtwo = lambda x: x + 2
class LambdaTest(unittest.TestCase):
    def test_add_two(self):
        self.assertEqual(addtwo(2), 4)
    def test_add_two_point_two(self):
        self.assertEqual(addtwo(2.2), 4.2)
    def test_add_three(self): # Should fail
        self.assertEqual(addtwo(3), 6)
if __name__ == '__main__':
    unittest.main(verbosity=2)

LambdaTest được định nghĩa trong một trường hợp thử nghiệm cùng với 3 phương pháp thử nghiệm. Với mỗi phương pháp sẽ thực hiện một kịch bản thử nghiệm để có thể addtwo() triển khai dưới dạng một hàm lambda.

Quá trình thực hiện tệp Python lambda_unittest.pt có chứa LambdaTest tạo ra:

$ python lambda_unittest.py
test_add_three (__main__.LambdaTest) ... FAIL
test_add_two (__main__.LambdaTest) ... ok
test_add_two_point_two (__main__.LambdaTest) ... ok

======================================================================
FAIL: test_add_three (__main__.LambdaTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lambda_unittest.py", line 18, in test_add_three
    self.assertEqual(addtwo(3), 6)
AssertionError: 5 != 6

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)

doctest

from doctest import testmod

sum = lambda a, b: a + b

testmod(name='sum', verbose=True)

Ưu điểm và hạn chế của Python Lambda Functions

Ưu điểm của hàm lambda: giúp tinh gọn và tối ưu quá trình lập trình bằng Python trong những trường hợp bạn cần xử lý các vấn đề logic tại một điểm nhất định trong một thời gian ngắn.

Nhược điểm của hàm lambda: quá trình debug với các đoạn code sử dụng hàm lambda sẽ khó khăn hơn các hàm thông thường.

Python Lambda Functions

Hy vọng với bài viết trên đây bạn đã hiểu sơ lược về hàm lambda và cách sử dụng loại hàm này khi lập trình bằng Python. Áp dụng cách thức mà chúng tôi đã giới thiệu sẽ giúp đoạn code của bạn có tính logic cao hơn và hoạt động một cách hiệu quả.

1