Hàm Lambda trong Python là gì? Cách sử dụng Lambda trong Python

1132
18-09-2024
Hàm Lambda trong Python là gì? Cách sử dụng Lambda trong Python

Hàm Lambda, còn được gọi là hàm ẩn danh, là một trong những tính năng thú vị nhưng cũng không kém phần khó hiểu trong Python. Bài viết này Bizfly Cloud sẽ giúp bạn hiểu rõ hàm Lambda là gì, cách thức hoạt động và cách ứng dụng chúng hiệu quả để viết code gọn gàng và chuyên nghiệp hơn.

Giới Thiệu Về Hàm Lambda

Mặc dù Python được biết đến là một ngôn ngữ lập trình dễ học và dễ hiểu, nhưng điều đó không có nghĩa là nó không có những khái niệm phức tạp. Một trong những khái niệm đó chính là hàm Lambda. Những hàm này (còn được gọi là hàm ẩn danh) tương tự như các hàm mà bạn tự xây dựng nhưng không có tên.

Vậy những hàm này dùng để làm gì? Nói một cách đơn giản, bạn sử dụng hàm Lambda khi muốn viết một hàm chỉ chứa các biểu thức đơn giản. Bạn có thể có một biểu thức cần sử dụng mà không cần một hàm đầy đủ để thực hiện đúng cách hoặc chỉ được sử dụng một lần trong mã/ứng dụng của bạn. Đó là lúc hàm Lambda phát huy tác dụng.

Hàm Lambda chỉ bao gồm ba phần: từ khóa (là lambda), một trình giữ chỗ để chứa giá trị được truyền cho biểu thức và biểu thức.

Giới Thiệu Về Hàm Lambda

Giới Thiệu Về Hàm Lambda

Định dạng của hàm Lambda trông như thế này:

lambda arguments : expression

Trong ví dụ trên, arguments là trình giữ chỗ giá trị.

Để minh họa hàm Lambda tiện dụng như thế nào, hãy xem xét rằng chúng ta muốn viết một hàm sẽ cộng 20 vào biến a và in kết quả. Hàm đó có thể trông như thế này:

Hãy để tôi giải thích. Những gì chúng ta đang làm là xác định biến x bằng hàm Lambda a cộng 20 vào biến a. Tất nhiên, chúng ta phải xác định a, điều mà chúng ta có thể làm trong hàm print() như sau:

Toàn bộ mã trông như thế này:

 

x = lambda a : a + 20print(x10))

Nếu bạn chạy mã trên, kết quả sẽ là 30. Tại sao? Bởi vì chúng ta đã xác định hàm Lambda của mình sao cho nó cộng giá trị 20 vào a và sau đó chúng ta xác định a là 10.

20 + 10 = 30

Hàm Lambda Với Nhiều Biến

Chúng ta cũng có thể tạo một hàm Lambda bao gồm hai biến (giả sử là x và y) và nhân chúng với nhau. Hàm Lambda đó sẽ trông như thế này:

Những gì chúng tôi đã làm ở trên là xác định a bằng hàm Lambda mới của chúng tôi, sau đó nhân x * y. Sau đó, chúng ta có thể xác định x và y trong hàm in của mình như sau:

Toàn bộ mã trông như thế này:

 

a = lambda x, y : x * yprint(a(10, 50))

Chạy mã trên và kết quả sẽ là 500.

10 * 50 = 500

Tuyệt vời.

Chúng ta hãy tiến thêm một bước nữa. Hãy cộng nhiều biến với nhau trong một hàm Lambda. Điều đó có thể trông như thế này:

 

x = lambda a, b, c : a + b * cprint(x(10, 20, 30))

Kết quả của phép tính trên là 610.

Nhưng làm cách nào để chúng ta sử dụng hiệu quả các hàm Lambda trong mã của mình? Tại sao chúng ta không xác định một hàm bằng hàm Lambda và sau đó gọi hàm đó sau trong mã? Để làm điều này, chúng ta sẽ sử dụng câu lệnh return, được sử dụng để kết thúc việc thực thi lệnh gọi hàm và trả về kết quả.

Trước tiên, hãy xác định một hàm Lambda nhân a với x trông như thế này:

 

def myfunc(x):return lambda a : a * x

Tiếp theo, chúng ta sẽ nhân ba giá trị từ myfunc(x) với dòng:

Những gì chúng ta đã làm ở trên được gọi là myfunc và xác định x là 3 cho hàm Lambda.

Dòng tiếp theo của chúng ta trông như thế này:

Những gì chúng tôi đã làm ở đây là xác định a (từ hàm Lambda của chúng tôi) là 10, vì vậy chúng tôi thực sự có 10 lần 3. Kết quả (như mong đợi) sẽ là 30.

So Sánh Hàm Lambda Và Hàm Thông Thường

Hãy so sánh hàm Lambda với một hàm chuẩn (để bạn có thể thấy nó hiệu quả như thế nào). Xem xét điều này:

 

def a(x):return x * 10print(a(3))

Nếu chúng ta chạy phần trên, nó sẽ in ra 30.

Nhưng làm thế nào mà nó có thể hoạt động như một hàm Lambda? Như sau:

 

a = lambda x : x * 10print(a(3))

Đoạn mã trên sẽ in ra kết quả tương tự, nhưng chúng ta chỉ phải sử dụng 2 dòng mã.

Tất nhiên, nếu chúng ta muốn tạo một hàm sẽ được sử dụng lặp đi lặp lại trong mã của mình, chúng ta sẽ không chọn hàm Lambda. Nhưng đối với những hàm chỉ được sử dụng một lần, Lambda là con đường để đi. Tại sao trường hợp này? Bởi vì các hàm Lambda của chúng ta không có tên và nếu không có tên, chúng không thể được gọi sau này.

Sử dụng hàm lambda với danh sách

Bạn cũng có thể sử dụng hàm Lambda với danh sách. Điều này được thực hiện bằng cách sử dụng hàm filter(), hàm này sử dụng một hàm và một danh sách các đối số và giúp dễ dàng lọc ra các đối tượng từ chuỗi mà hàm trả về là đúng. Giả sử bạn muốn chỉ trả về các số lẻ từ một danh sách. Chúng ta có thể làm điều đó với hàm Lambda:

Cái đó để làm gì? Đơn giản. Với toán tử %, nó trả về phần dư khi toán hạng đầu tiên được chia cho toán hạng thứ hai và sau đó != có nghĩa là không bằng. Hàm đó sẽ trả về False nếu x không chẵn.

Danh sách của chúng tôi sẽ là:

 

lista = [1, 3, 6, 9, 11, 16, 21, 24, 30, 31]

Sau đó, chúng tôi xác định odd_out bằng hàm Lambda của mình như thế này:

 

odd_out = list(filter(lambda x : (x % 2 != 0), lista))

Sau đó, chúng ta có thể in kết quả bằng cách sử dụng:

Toàn bộ mã trông như thế này:

 

lista = [1, 3, 6, 9, 11, 16, 21, 24, 30, 31]odd_out = list(filter(lambda x : (x % 2 != 0), lista))print(odd_out)

Nếu chúng ta chạy mã trên, chúng ta sẽ nhận được kết quả sau:

[1, 3, 9, 11, 21, 31]

Chỉ các số lẻ được in.

Và đó, bạn bè của tôi, là phần giới thiệu của bạn về các hàm Lambda trong Python. Những điều nhỏ nhặt này có thể có ích và thậm chí giữ cho mã của bạn gọn gàng hơn một chút.


SHARE