Cách sử dụng các hàm Lambda trong Python [With Examples]

Spread the love

Trong hướng dẫn này, bạn sẽ tìm hiểu tất cả về các hàm lambda trong Python – từ cú pháp để xác định các hàm lambda đến các trường hợp sử dụng khác nhau với các ví dụ mã.

Trong Python, lambdas là các hàm ẩn danh có cú pháp ngắn gọn và có thể được sử dụng với các hàm tích hợp hữu ích khác. Đến cuối hướng dẫn này, bạn sẽ học cách định nghĩa các hàm lambda và khi nào bạn nên cân nhắc sử dụng chúng thay vì các hàm Python thông thường.

Hãy bắt đầu nào!

Hàm Lambda trong Python: Cú pháp và ví dụ

Đây là cú pháp chung để xác định một hàm lambda trong Python:

lambda parameter(s):return value

Trong cú pháp chung trên:

  • lambda là từ khóa bạn nên sử dụng để xác định một hàm lambda, theo sau là một hoặc nhiều tham số mà hàm sẽ nhận.
  • Có dấu hai chấm ngăn cách giữa các tham số và giá trị trả về.

💡 Khi xác định một hàm lambda, bạn nên đảm bảo rằng giá trị trả về được tính bằng cách đánh giá một biểu thức kéo dài một dòng mã. Bạn sẽ hiểu điều này tốt hơn khi chúng tôi viết mã các ví dụ.

Ví dụ về hàm Lambda trong Python

Cách tốt nhất để hiểu các hàm lambda là bắt đầu bằng cách viết lại các hàm Python thông thường dưới dạng các hàm lambda.

👩🏽‍💻 Bạn có thể viết mã trong Python REPL hoặc trong trình soạn thảo Python trực tuyến của techpoe.com.

# 1. Hãy xem xét hàm sau square (), lấy một số, num, làm đối số và trả về bình phương của số.

def square(num):
    return num*num

Bạn có thể gọi hàm với các đối số và xác minh rằng nó hoạt động chính xác.

>>> square(9)
81
>>> square(12)
144

Bạn có thể gán biểu thức lambda này cho một tên biến, chẳng hạn, square1 để làm cho định nghĩa hàm ngắn gọn hơn: square1 = lambda num: num * num và sau đó gọi hàm square1 với bất kỳ số nào làm đối số. Tuy nhiên, chúng tôi biết rằng lambdas là các hàm ẩn danh, vì vậy bạn nên tránh gán chúng cho một biến.

Đối với hàm square (), tham số là num và giá trị trả về là num * num. Sau khi chúng tôi đã xác định được những điều này, chúng tôi có thể cắm chúng vào biểu thức lambda và gọi nó với một đối số, như được hiển thị:

>>> (lambda num: num*num)(2)
4

Đây là khái niệm của Biểu thức hàm được gọi ngay lập tức, trong đó chúng ta gọi một hàm ngay sau khi xác định nó.

# 2. Tiếp theo, hãy viết lại một hàm đơn giản khác add () nhận vào các số, num1 và num2, và trả về tổng của chúng, num1 + num2.

def add(num1,num2):
    return num1 + num2

Hãy gọi hàm add () với hai số làm đối số:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

Trong trường hợp này, num1 và num2 là hai tham số và giá trị trả về là num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Các hàm Python cũng có thể nhận các giá trị mặc định cho các tham số. Hãy sửa đổi định nghĩa của hàm add () và đặt giá trị mặc định của tham số num2 thành 10.

def add(num1, num2=10):
    return num1 + num2

Trong các lệnh gọi hàm sau:

  • Trong lần gọi hàm đầu tiên, giá trị của num1 là 1 và giá trị của num2 là 3. Khi bạn chuyển giá trị cho num2 trong lệnh gọi hàm, giá trị đó sẽ được sử dụng; hàm trả về 4.
  • Tuy nhiên, nếu bạn chỉ truyền một đối số (num1 là 7), giá trị mặc định của 10 được sử dụng cho num2; hàm trả về 17.
>>> add(1,3)
4
>>> add(7)
17

Khi viết các hàm nhận giá trị mặc định cho các tham số nhất định dưới dạng biểu thức lambda, bạn có thể chỉ định giá trị mặc định khi xác định các tham số.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Khi nào bạn nên sử dụng các hàm Lambda trong Python?

Bây giờ bạn đã học những kiến ​​thức cơ bản về các hàm lambda trong Python, đây là một vài trường hợp sử dụng:

  • Khi bạn có một hàm có biểu thức trả về là một dòng mã và bạn không cần tham chiếu hàm ở nơi khác trong cùng một mô-đun, bạn có thể sử dụng các hàm lambda. Chúng tôi cũng đã mã hóa một số ví dụ để hiểu điều này.
  • Bạn có thể sử dụng các hàm lambda khi sử dụng các hàm dựng sẵn, chẳng hạn như map (), filter () và Reduce ().
  • Các hàm Lambda có thể hữu ích trong việc sắp xếp các cấu trúc dữ liệu Python như danh sách và từ điển.
  Cách thay đổi vị trí của bạn trên Chromebook

Cách sử dụng Python Lambda với các hàm tích hợp

1. Sử dụng Lambda với map ()

Hàm map () nhận vào một hàm có thể lặp lại và một hàm và áp dụng hàm cho từng mục trong hàm có thể lặp lại, như được hiển thị:

Hãy tạo một danh sách nums và sử dụng hàm map () để tạo một danh sách mới chứa bình phương của mỗi số trong danh sách nums. Lưu ý việc sử dụng hàm lambda để xác định phép toán bình phương.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Khi hàm map () trả về một đối tượng bản đồ, chúng ta nên chuyển nó vào một danh sách.

▶ ️ Hãy xem hướng dẫn này về hàm map () trong Python.

2. Sử dụng Lambda với bộ lọc ()

Hãy xác định nums, một danh sách các số:

>>> nums = [4,5,6,9]

Giả sử bạn muốn lọc danh sách này và chỉ giữ lại các số lẻ.

Bạn có thể sử dụng hàm filter () có sẵn của Python.

Hàm filter () nhận trong một điều kiện và có thể lặp lại: filter (điều kiện, có thể lặp). Kết quả chỉ chứa các phần tử trong tệp có thể lặp lại ban đầu thỏa mãn điều kiện. Bạn có thể truyền đối tượng được trả về thành một danh sách có thể lặp lại trong Python chẳng hạn như danh sách.

Để lọc ra tất cả các số chẵn, chúng tôi sẽ chỉ giữ lại các số lẻ. Vì vậy, biểu thức lambda phải là lambda num: num% 2! = 0. Số lượng num% 2 là phần còn lại khi num chia cho 2.

  • num% 2! = 0 là True bất cứ khi nào num là lẻ và
  • num% 2! = 0 là False bất cứ khi nào num là số chẵn.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Sử dụng Lambda với Reduce ()

Hàm Reduce () nhận trong một hàm có thể lặp lại và một hàm. Nó làm giảm khả năng lặp lại bằng cách áp dụng hàm lặp đi lặp lại trên các mục của có thể lặp lại.

  Kiểm tra hoạt động mạng trên máy Mac của bạn bằng Trình theo dõi hoạt động

Để sử dụng hàm Reduce (), bạn sẽ phải nhập nó từ mô-đun functools tích hợp sẵn của Python:

>>> from functools import reduce

Hãy sử dụng hàm Reduce () để tính tổng của tất cả các số trong danh sách nums. Chúng tôi định nghĩa một biểu thức lambda: lambda num1, num2: num1 + num2, làm hàm tổng giảm.

Phép toán giảm sẽ xảy ra như sau: f (f (f (4,5), 6), 9) = f (f (9,6), 9) = f (15,9) = 24. Ở đây, f là phép tính tổng trên hai mục của danh sách, được xác định bởi hàm lambda.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Các chức năng của Python Lambda để Tùy chỉnh Sắp xếp

Ngoài việc sử dụng các hàm lambda với các hàm Python tích hợp sẵn, chẳng hạn như map (), filter () và Reduce (), bạn cũng có thể sử dụng chúng để tùy chỉnh các hàm và phương thức tích hợp được sử dụng để sắp xếp.

1. Sắp xếp danh sách Python

Khi làm việc với danh sách Python, bạn thường phải sắp xếp chúng dựa trên các tiêu chí sắp xếp nhất định. Để sắp xếp danh sách Python tại chỗ, bạn có thể sử dụng phương thức sort () tích hợp trên chúng. Nếu bạn cần một bản sao được sắp xếp của danh sách, bạn có thể sử dụng hàm sorted ().

Cú pháp để sử dụng hàm sorted () của Python được sắp xếp (có thể lặp lại, khóa =…, đảo ngược = Đúng | Sai).

– Tham số chính được sử dụng để tùy chỉnh sắp xếp.
– Tham số đảo ngược có thể được đặt thành True hoặc False; giá trị mặc định là Sai.

Khi sắp xếp danh sách số và chuỗi, sắp xếp mặc định theo thứ tự tăng dần và thứ tự bảng chữ cái, tương ứng. Tuy nhiên, đôi khi bạn có thể muốn xác định một số tiêu chí tùy chỉnh để sắp xếp.

Hãy xem xét danh sách các loại trái cây sau đây. Giả sử bạn muốn lấy một bản sao danh sách đã được sắp xếp. Bạn nên sắp xếp các chuỗi theo số lần xuất hiện của ‘p’ trong chúng – theo thứ tự giảm dần.

>>> fruits = ['apple','pineapple','grapes','mango']

Đã đến lúc sử dụng tham số khóa tùy chọn. Một chuỗi là một chuỗi có thể lặp lại trong Python và để có được số lần xuất hiện của một ký tự trong đó, bạn có thể sử dụng phương thức .count () tích hợp sẵn. Vì vậy, chúng tôi đặt khóa thành lambda x: x.count (‘p’) để việc sắp xếp dựa trên số lần ‘p’ xuất hiện trong chuỗi.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

Trong ví dụ này:

  • Chìa khóa để sắp xếp là số lần xuất hiện của ký tự ‘p’ và nó được định nghĩa là một biểu thức lambda.
  • Vì chúng tôi đã đặt tham số ngược thành True, việc sắp xếp xảy ra theo thứ tự giảm dần của số lần xuất hiện của ‘p’.

Trong danh sách trái cây, ‘dứa’ chứa 3 lần xuất hiện của “p” và các chuỗi “táo”, “nho” và “xoài” lần lượt chứa 2, 1 và 0 lần xuất hiện của ‘p’.

Hiểu sắp xếp ổn định

Hãy xem xét một ví dụ khác. Đối với cùng một tiêu chí phân loại, chúng tôi đã xác định lại danh sách trái cây. Ở đây, ‘p’ xuất hiện trong các chuỗi ‘apple’ và ‘nho’ lần lượt hai lần và một lần. Và nó không bao giờ xảy ra trong chuỗi “xoài” và “dưa”.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

Trong danh sách đầu ra, ‘xoài’ đứng trước ‘dưa’ mặc dù cả hai đều không có ký tự ‘p’. Nhưng tại sao lại như vậy? Hàm sorted () thực hiện sắp xếp ổn định; vì vậy khi số lượng của ‘p’ bằng nhau cho hai chuỗi, thứ tự của các phần tử trong danh sách trái cây ban đầu được giữ nguyên.

  Kiểm tra hoạt động mạng trên máy Mac của bạn bằng Trình theo dõi hoạt động

Như một bài tập nhanh, hãy hoán đổi vị trí của ‘xoài’ và ‘dưa’ trong danh sách trái cây, sắp xếp danh sách dựa trên cùng một tiêu chí và quan sát kết quả.

▶ ️ Tìm hiểu thêm về cách sắp xếp danh sách Python.

2. Sắp xếp từ điển Python

Bạn cũng có thể sử dụng lambdas khi sắp xếp các từ điển Python. Hãy xem xét price_dict từ điển sau đây có chứa các mặt hàng và giá của chúng.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Để lấy các cặp khóa-giá trị của từ điển dưới dạng danh sách các bộ giá trị, bạn có thể sử dụng phương thức từ điển tích hợp sẵn .items ():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

Trong Python, tất cả các tệp lặp: danh sách, bộ giá trị, chuỗi và hơn thế nữa, tuân theo lập chỉ mục bằng không. Vì vậy, mục đầu tiên ở chỉ mục 0, mục thứ hai ở chỉ mục 1, v.v.

Chúng tôi muốn sắp xếp theo giá trị, đó là giá của từng mặt hàng trong từ điển. Trong mỗi bộ trong danh sách price_dict_items, mục ở chỉ mục 1 là giá. Vì vậy, chúng tôi đặt khóa thành lambda x: x[1] vì nó sẽ sử dụng mục ở chỉ mục 1, giá, để sắp xếp từ điển.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Trong đầu ra, các mục từ điển đã được sắp xếp theo thứ tự tăng dần về giá: bắt đầu bằng ‘Kẹo’, giá 3 đơn vị đến ‘Mật ong’, giá 15 đơn vị.

▶ ️ Để tìm hiểu thêm, hãy xem hướng dẫn chi tiết về cách sắp xếp từ điển Python theo khóa và giá trị.

Tổng hợp

Và bạn có nó rồi đấy! Bạn đã học cách xác định các hàm lambda và sử dụng chúng một cách hiệu quả với các hàm tích hợp sẵn khác của Python. Dưới đây là một bản tóm tắt về những điều quan trọng:

  • Trong Python, lambdas là các hàm ẩn danh có thể nhận nhiều đối số và trả về một giá trị; biểu thức được đánh giá để tạo ra giá trị trả về này phải là một dòng mã. Chúng có thể được sử dụng để làm cho các định nghĩa hàm nhỏ ngắn gọn hơn.
  • Để xác định hàm Lambda, bạn có thể sử dụng cú pháp: lambda tham số (s): giá trị trả về.
  • Một số trường hợp sử dụng quan trọng bao gồm việc sử dụng chúng với các hàm map (), filter (), và Reduce () và làm tham số chính để tùy chỉnh việc sắp xếp các tệp lặp Python.

Tiếp theo, tìm hiểu cách thực hiện phân chia tầng trong Python.

x