Huy Bui
1,084
02-12-2022
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 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:
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:
>> Học Data analyst online dễ hơn bao giờ hết từ Cole với hàng loạt các biểu thức, hàm số từ nhiều ngôn ngữ lập trình được tóm tắt và lược giản với thực tế công việc
Các ví dụ sau minh họa các tùy chọn mở cho bạn để truyền đối số cho biểu thức lambda:
<pre><code>
>>>
>>> (lambda x, y, z: x + y + z)(1, 2, 3)
6
>>> (lambda x, y, z=3: x + y + z)(1, 2)
6
>>> (lambda x, y, z=3: x + y + z)(1, y=2)
6
>>> (lambda *args: sum(args))(1,2,3)
6
>>> (lambda **kwargs: sum(kwargs.values()))(one=1, two=2, three=3)
6
>>> (lambda x, *, y=0, z=0: x + y + z)(1, y=2, z=3)
6
</pre></code>
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 ref. Còn hàm lambda sẽ cần keyword lambda để định nghĩa.
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:
<pre><code>
#Normal python function
def a_name(x):
return x+x
</pre></code>
Công việc tương tự có thể được thực hiện bằng cách sử dụng hàm Lambda như sau:
<pre><code>
#Lambda function
lambda x: x+x
</pre></code>
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.
>> Xem thêm các chứng chỉ lập trình 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à:
<pre><code>
lambda arguments: expression
</pre></code>
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
<pre><code>
lambda x: x + 2
</pre></code>
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.
<pre><code>
(lambda x: x + 2)(4)
</pre></code>
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:
Vì các hàm Lambda là các biểu thức nên bạn có thể gán tên cho chúng. Do đó, bạn có thể đổi tên hàm Lambda trước đó như sau:
<pre><code>
AddTwo = lambda x: x + 2
AddTwo(4)
</pre></code>
Đoạn mã cho kết quả sau:
<pre><code>
6
</pre></code>
Hàm Lambda Python hoạt động giống như hàm Python bình thường sau:
<pre><code>
def add_two(x):
return x + 2
</pre></code>
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.
Để 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.
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ố.
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.
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:
<pre><code>
MyList = [7, 1, 2, 8, 17, 3, 10, 14]
NewList = list(filter(lambda x: (x%2 == 0) , MyList))
print(NewList)
</pre></code>
Đ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:
Đầu ra
<pre><code>
[2, 8, 10, 14]
</pre></code>
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.
<pre><code>
MyList = [3, 4, 5, 9, 8, 7, 11, 13]
NewList = list(map(lambda x: x * 2 , MyList))
print(NewList)
</pre></code>
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:
Đầu ra
<pre><code>
[6, 8, 10, 18, 16, 14, 22, 26]
</pre></code>
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.
từ functools nhập giảm
<pre><code>
lis = [12, 5, 20, 10, 200, 70]
sum = reduce((lambda x, y: x + y), lis)
print (sum)
</pre></code>
Mã sẽ cung cấp cho bạn kết quả sau:
<pre><code>
317
</pre></code>
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 unittest và doctest.
unittest
Các module unittest xử lý các hàm lambda giống với chức năng thường xuyên:
<pre><code>
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)
</pre></code>
Program Code – Python and Flask framework
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:
<pre><code>
$ 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)
</pre></code>
>> Xem thêm: hướng dẫn cài đặt Python trên mọi nền tảng
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ả.
>> Khóa học data analysis với Python với mọi kiến thức mới nhất chỉ có tại Cole