Lambda là gì? Lambdas, còn được gọi là hàm ẩn danh, là các hàm nhỏ, bị hạn chế, không cần tên (tức là số nhận dạng). Các hàm Lambda lần đầu tiên được giới thiệu trong lĩnh vực toán học

Bạn đang xem: hàm lambda trong python là gì

Hàm Lambda trong Python là gì?

Một Hàm Lambda trong lập trình Python là một hàm ẩn danh hoặc một hàm không có tên. Đây là một hàm nhỏ và bị hạn chế không có nhiều hơn một dòng. Cũng giống như một hàm bình thường, một hàm Lambda có thể có nhiều đối số với một biểu thức.

Trong Python, các biểu thức lambda (hoặc các biểu mẫu lambda) được sử dụng để xây dựng các hàm ẩn danh. Để làm như vậy, bạn sẽ sử dụng từ khóa lambda (giống như bạn sử dụng def để xác định các hàm thông thường). Mỗi hàm ẩn danh mà bạn xác định trong Python sẽ có 3 phần thiết yếu:

  • Từ khoá lambda.
  • Các tham số (hoặc các biến bị ràng buộc) và
  • Phần thân của chức năng.

Một hàm lambda có thể có bất kỳ số lượng tham số nào, nhưng thân hàm chỉ có thể chứa biểu thức một . Hơn nữa, một lambda được viết bằng một dòng mã và cũng có thể được gọi ngay lập tức. Bạn sẽ thấy tất cả điều này hoạt động trong các ví dụ sắp tới.

Trong hướng dẫn Lambda in Python này, bạn sẽ học:

Cú pháp và ví dụ

Cú pháp chính thức để viết một hàm lambda như được cung cấp bên dưới:

 lambda p1, p2: biểu thức 

Ở đây, p1 và p2 là các tham số được chuyển cho hàm lambda. Bạn có thể thêm nhiều hoặc ít tham số tùy ý.

Tuy nhiên, lưu ý rằng chúng tôi không sử dụng dấu ngoặc xung quanh các tham số như chúng tôi làm với các hàm thông thường. Phần cuối cùng (biểu thức) là bất kỳ biểu thức python hợp lệ nào hoạt động dựa trên các tham số bạn cung cấp cho hàm.

Ví dụ 1

Bây giờ bạn đã biết về lambdas, hãy thử với một ví dụ. Vì vậy, hãy mở IDLE của bạn và nhập thông tin sau:

 adder = lambda x, y: x + y
in (bộ cộng (1, 2))

Đây là kết quả:

 3 

Giải thích mã

Ở đây, chúng tôi xác định một biến sẽ giữ kết quả được trả về bởi hàm lambda.

1. Từ khóa lambda được sử dụng để xác định một hàm ẩn danh.

2. x và y là các tham số mà chúng tôi truyền cho hàm lambda.

3. Đây là phần thân của hàm, hàm này thêm 2 tham số mà chúng tôi đã truyền vào. Lưu ý rằng nó là một biểu thức duy nhất. Bạn không thể viết nhiều câu lệnh trong phần nội dung của một hàm lambda.

4. Chúng tôi gọi hàm và in giá trị trả về.

Ví dụ 2

Đó là một ví dụ cơ bản để hiểu các nguyên tắc cơ bản và cú pháp của lambda. Bây giờ chúng ta hãy thử in lambda và xem kết quả. Một lần nữa, hãy mở IDLE của bạn và nhập thông tin sau:

 # Lambda trả về cái gì
string = 'một số loại lambda vô dụng'
print (lambda string: print (string))

Bây giờ lưu tệp của bạn và nhấn F5 để chạy chương trình. Đây là đầu ra bạn sẽ nhận được.

Bây giờ, hãy lưu tệp của bạn và nhấn F5 để chạy chương trình. Đây là đầu ra bạn sẽ nhận được.

Đầu ra:

 & lt; function & lt; lambda & gt; ở 0x00000185C3BF81E0 & gt;

Điều gì đang xảy ra ở đây? Hãy xem mã để hiểu thêm.

Giải thích mã

  1. Ở đây, chúng tôi xác định một chuỗi mà bạn sẽ chuyển làm tham số cho lambda.
  2. Chúng tôi khai báo một lambda gọi một câu lệnh in và in kết quả.

Nhưng tại sao chương trình không in chuỗi mà chúng tôi truyền vào? Điều này là do bản thân lambda trả về một đối tượng hàm. Trong ví dụ này, lambda không được gọi bởi hàm in mà chỉ đơn giản là trả về đối tượng hàm và vị trí bộ nhớ nơi nó được lưu trữ. Đó là những gì được in trên bảng điều khiển.

Ví dụ 3

Tuy nhiên, nếu bạn viết một chương trình như thế này:

 # What a lambda trả về # 2
x = "một số loại lambda vô dụng"
(lambda x: print (x)) (x)

Và chạy nó bằng cách nhấn F5, bạn sẽ thấy một kết quả như thế này.

Đầu ra:

 một số loại lambda vô dụng 

Bây giờ, lambda đang được gọi và chuỗi mà chúng ta truyền vào sẽ được in trên bảng điều khiển. Nhưng cú pháp kỳ lạ đó là gì, và tại sao định nghĩa lambda lại được đặt trong dấu ngoặc? Hãy hiểu điều đó ngay bây giờ.

Giải thích mã

  1. Đây là chuỗi tương tự mà chúng tôi đã xác định trong ví dụ trước.
  2. Trong phần này, chúng tôi đang định nghĩa lambda và gọi nó ngay lập tức bằng cách chuyển chuỗi làm đối số. Đây được gọi là IIFE và bạn sẽ tìm hiểu thêm về nó trong các phần sắp tới của hướng dẫn này.
Xem Thêm  Cách tốt nhất để tạo nút HTML của bạn: Dễ dàng thêm liên kết nút HTML - làm thế nào để tạo một nút

Ví dụ 4

Hãy xem ví dụ cuối cùng để hiểu cách lambdas và các hàm thông thường được thực thi. Vì vậy, hãy mở IDLE của bạn và trong một tệp mới, nhập thông tin sau:

 #A CHỨC NĂNG THƯỜNG XUYÊN
def guru (funct, * args):
funct (* args)
def print_one (arg):
trả về bản in (arg)
def print_two (arg):
print (arg)
# GỌI MỘT CHỨC NĂNG THƯỜNG XUYÊN
guru (máy in_one, 'máy in 1 CUỘC GỌI THƯỜNG XUYÊN')
guru (print_two, 'máy in 2 CUỘC GỌI THƯỜNG XUYÊN \ n')
# GỌI MỘT CHỨC NĂNG THƯỜNG XUYÊN THRU A LAMBDA
guru (lambda: print_one ('print 1 LAMBDA CALL'))
guru (lambda: print_two ('máy in 2 LAMBDA CALL'))

Bây giờ, hãy lưu tệp và nhấn F5 để chạy chương trình. Nếu bạn không mắc bất kỳ lỗi nào, đầu ra sẽ giống như thế này.

Đầu ra:

máy in 1 CUỘC GỌI THƯỜNG XUYÊN

máy in 2 CUỘC GỌI THƯỜNG XUYÊN

máy in 1 LAMBDA CALL

máy in 2 LAMBDA CALL

Giải thích mã

  1. Một hàm được gọi là guru nhận một hàm khác làm tham số đầu tiên và bất kỳ đối số nào khác theo sau nó.
  2. print_one là một hàm đơn giản để in thông số được truyền cho nó và trả về nó.
  3. print_two tương tự như print_one nhưng không có câu lệnh return.
  4. Trong phần này, chúng tôi đang gọi hàm guru và chuyển các hàm của máy in và một chuỗi làm tham số.
  5. Đây là cú pháp để đạt được bước thứ tư (tức là gọi hàm guru) nhưng sử dụng lambdas.

Trong phần tiếp theo, bạn sẽ tìm hiểu cách sử dụng các hàm lambda với map (), Reduce (), filter () bằng Python.

Sử dụng lambdas có tích hợp sẵn Python

Các hàm Lambda cung cấp một cách thanh lịch và mạnh mẽ để thực hiện các hoạt động bằng cách sử dụng các phương thức tích hợp sẵn trong Python. Điều này có thể xảy ra vì lambdas có thể được gọi ngay lập tức và được chuyển làm đối số cho các hàm này.

IIFE trong Python Lambda

IIFE là viết tắt của thực thi hàm được gọi ngay lập tức. Có nghĩa là một hàm lambda có thể được gọi ngay sau khi nó được xác định. Hãy hiểu điều này bằng một ví dụ; kích hoạt IDLE của bạn và nhập thông tin sau:

 (lambda x: x + x) (2) 

Đây là đầu ra và giải thích mã:

Khả năng gọi lambdas này ngay lập tức cho phép bạn sử dụng chúng bên trong các hàm như map () và Reduce (). Nó hữu ích vì bạn có thể không muốn sử dụng lại các chức năng này.

lambdas trong bộ lọc ()

Chức năng bộ lọc được sử dụng để chọn một số phần tử cụ thể từ một chuỗi các phần tử. Chuỗi có thể là bất kỳ trình lặp nào như danh sách, bộ, bộ giá trị, v.v.

Các phần tử sẽ được chọn dựa trên một số ràng buộc được xác định trước. Nó có 2 tham số:

  • Một hàm xác định ràng buộc lọc
  • Một trình tự (bất kỳ trình lặp nào như danh sách, bộ giá trị, v.v.)

Ví dụ:

 trình tự = [10,2,8,7,5,4,3,11,0, 1]
filter_result = filter (lambda x: x & gt; 4, chuỗi)
print (danh sách (kết quả lọc))

Đây là kết quả:

 [10, 8, 7, 5, 11] 

Giải thích mã:

1. Trong câu lệnh đầu tiên, chúng tôi xác định một danh sách được gọi là chuỗi chứa một số số.

2. Ở đây, chúng tôi khai báo một biến có tên là filter_result, biến này sẽ lưu trữ các giá trị đã lọc được trả về bởi hàm filter ().

3. Một hàm lambda chạy trên từng phần tử của danh sách và trả về true nếu nó lớn hơn 4.

4. In kết quả được trả về bởi chức năng bộ lọc.

lambdas trong map ()

hàm bản đồ được sử dụng để áp dụng một thao tác cụ thể cho mọi phần tử trong một chuỗi. Giống như filter (), nó cũng có 2 tham số:

  1. Một hàm xác định lựa chọn thực hiện trên các phần tử
  2. Một hoặc nhiều chuỗi

Ví dụ: đây là một chương trình in ra các ô vuông của các số trong một danh sách nhất định:

 trình tự = [10,2,8,7,5,4,3,11,0, 1]
Lọc_result = bản đồ (lambda x: x * x, chuỗi)
print (danh sách (kết quả lọc))

Đầu ra:

 [100, 4, 64, 49, 25, 16, 9, 121, 0, 1] 

[KR1]

Giải thích mã:

  1. Ở đây, chúng tôi xác định một danh sách được gọi là chuỗi chứa một số số.
  2. Chúng tôi khai báo một biến có tên filter_result sẽ lưu trữ các giá trị được ánh xạ
  3. Một hàm lambda chạy trên từng phần tử của danh sách và trả về bình phương của số đó.
  4. In kết quả do hàm bản đồ trả về.

lambdas giảm ()

Hàm giảm, như map (), được sử dụng để áp dụng một phép toán cho mọi phần tử trong một chuỗi. Tuy nhiên, nó khác với bản đồ ở chỗ hoạt động của nó. Đây là các bước theo sau bởi hàm Reduce () để tính kết quả đầu ra:

Bước 1) Thực hiện thao tác đã xác định trên 2 phần tử đầu tiên của chuỗi.

Xem Thêm  GeeksforGeeks - ví dụ cho luồng trong java

Bước 2) Lưu kết quả này

Bước 3) Thực hiện thao tác với kết quả đã lưu và phần tử tiếp theo trong chuỗi.

Bước 4) Lặp lại cho đến khi không còn phần tử nào nữa.

Nó cũng có hai tham số:

  1. Một hàm xác định hoạt động sẽ được thực hiện
  2. Một trình tự (bất kỳ trình lặp nào như danh sách, bộ giá trị, v.v.)

Ví dụ: đây là một chương trình trả về tích của tất cả các phần tử trong danh sách:

 từ functools nhập giảm
chuỗi = [1,2,3,4,5]
product = Reduce (lambda x, y: x * y, các chuỗi)
in (sản phẩm)

Đây là kết quả:

 120 

Giải thích mã:

  1. Nhập giảm từ mô-đun functools
  2. Ở đây, chúng tôi xác định một danh sách được gọi là chuỗi chứa một số số.
  3. Chúng tôi khai báo một biến có tên là product sẽ lưu trữ giá trị giảm xuống
  4. Một hàm lambda chạy trên từng phần tử của danh sách. Nó sẽ trả về tích của số đó theo kết quả trước đó.
  5. In kết quả được trả về bởi hàm giảm.

Tại sao (và tại sao không) sử dụng các hàm lambda?

Như bạn sẽ thấy trong phần tiếp theo, lambdas được xử lý giống như các hàm thông thường ở cấp thông dịch. Theo một cách nào đó, bạn có thể nói rằng lambdas cung cấp cú pháp nhỏ gọn để viết các hàm trả về một biểu thức duy nhất.

Tuy nhiên, bạn nên biết khi nào nên sử dụng lambdas và khi nào nên tránh chúng. Trong phần này, bạn sẽ tìm hiểu một số nguyên tắc thiết kế được các nhà phát triển python sử dụng khi viết lambdas.

Một trong những trường hợp sử dụng phổ biến nhất cho lambdas là trong lập trình chức năng vì Python hỗ trợ mô hình (hoặc kiểu) lập trình được gọi là lập trình chức năng.

Nó cho phép bạn cung cấp một hàm dưới dạng tham số cho một hàm khác (ví dụ: trong bản đồ, bộ lọc, v.v.). Trong những trường hợp như vậy, việc sử dụng lambdas cung cấp một cách hay để tạo một hàm sử dụng một lần và chuyển nó làm tham số.

Khi nào bạn không nên sử dụng Lambda?

Bạn không bao giờ nên viết các hàm lambda phức tạp trong môi trường sản xuất. Sẽ rất khó khăn cho những người viết mã duy trì mã của bạn để giải mã nó. Nếu bạn thấy mình đang thực hiện các biểu thức một dòng phức tạp, sẽ là một phương pháp tốt hơn nhiều để xác định một hàm thích hợp. Cách tốt nhất, bạn cần nhớ rằng mã đơn giản luôn tốt hơn mã phức tạp.

Lambdas so với các hàm thông thường

Như đã nêu trước đây, lambdas là [vV4] [J5] chỉ là các hàm không có số nhận dạng liên kết với chúng. Nói cách đơn giản hơn, chúng là các hàm không có tên (do đó, ẩn danh). Dưới đây là bảng để minh họa sự khác biệt giữa lambdas và các hàm thông thường trong python.

Lambdas

Chức năng Thông thường

Cú pháp:

 lambda x: x + x 

Cú pháp:

 def (x):
trả về x + x

Các hàm lambda chỉ có thể có một biểu thức trong nội dung của chúng.

Các hàm thông thường có thể có nhiều biểu thức và câu lệnh trong nội dung của chúng.

Lambdas không có tên liên quan đến chúng. Đó là lý do tại sao chúng còn được gọi là chức năng ẩn danh.

Các hàm thông thường phải có tên và chữ ký.

Lambdas không chứa câu lệnh trả về vì phần nội dung được trả về tự động.

Các hàm cần trả về giá trị phải bao gồm câu lệnh trả về.

Giải thích về sự khác biệt?

Sự khác biệt chính giữa lambda và một hàm thông thường là hàm lambda chỉ đánh giá một biểu thức duy nhất và tạo ra một đối tượng hàm. Do đó, chúng ta có thể đặt tên cho kết quả của hàm lambda và sử dụng nó trong chương trình của mình như chúng ta đã làm trong ví dụ trước.

Một hàm thông thường cho ví dụ trên sẽ giống như sau:

Bộ cộng

 def (x, y):
trả về x + y
in (bộ cộng (1, 2))

Ở đây, chúng ta phải xác định một tên cho hàm mà trả về kết quả khi chúng ta gọi nó. Một hàm lambda không chứa câu lệnh trả về vì nó sẽ chỉ có một biểu thức duy nhất luôn được trả về theo mặc định. Bạn thậm chí không phải chỉ định lambda vì nó có thể được gọi ngay lập tức (xem phần tiếp theo). Như bạn sẽ thấy trong ví dụ sau, lambdas trở nên đặc biệt mạnh mẽ khi chúng ta sử dụng chúng với các hàm tích hợp sẵn của Python.

Tuy nhiên, bạn có thể vẫn thắc mắc rằng lambdas khác với hàm trả về một biểu thức đơn lẻ như thế nào (như hàm ở trên). Ở cấp độ phiên dịch, không có nhiều sự khác biệt. Nghe có vẻ đáng ngạc nhiên, nhưng bất kỳ hàm lambda nào mà bạn xác định trong Python đều được trình thông dịch coi là một hàm bình thường.

Xem Thêm  Các hàm bên trong Python - biến truy cập python bên trong hàm

Như bạn có thể thấy trong biểu đồ, hai định nghĩa được trình thông dịch python xử lý theo cùng một cách khi được chuyển đổi thành bytecode. Bây giờ, bạn không thể đặt tên cho một hàm là lambda vì nó được Python dành riêng, nhưng bất kỳ tên hàm nào khác sẽ mang lại cùng một mã byte [KR6].

Tóm tắt

  • Lambdas, còn được gọi là hàm ẩn danh, là các hàm nhỏ, bị hạn chế, không cần tên (tức là số nhận dạng).
  • Mỗi hàm lambda trong Python đều có 3 phần thiết yếu:
  • Từ khoá lambda.
  • Các tham số (hoặc các biến bị ràng buộc) và
  • Phần thân của chức năng.
  • Cú pháp để viết lambda là: tham số lambda: biểu thức
  • Lambdas có thể có bất kỳ số lượng tham số nào, nhưng chúng không được đặt trong dấu ngoặc nhọn
  • Một lambda chỉ có thể có 1 biểu thức trong thân hàm của nó, biểu thức này được trả về theo mặc định.
  • Ở cấp bytecode, không có nhiều sự khác biệt giữa cách xử lý lambdas và các hàm thông thường bởi trình thông dịch.
  • Lambdas hỗ trợ IIFE thông qua cú pháp này: (tham số lambda: biểu thức) (đối số)
  • Lambdas thường được sử dụng với các bản cài sẵn python sau:
  • Filter: bộ lọc (tham số lambda: biểu thức, chuỗi có thể lặp lại)
  • Bản đồ: bản đồ (tham số lambda: biểu thức, chuỗi có thể lặp lại)
  • Reduce: giảm (tham số lambda1, tham số2: biểu thức, chuỗi có thể lặp)
  • Không viết các hàm lambda phức tạp trong môi trường sản xuất vì điều đó sẽ gây khó khăn cho người bảo trì mã.

[J5] Tôi đã thêm một bảng, nhưng cần giải thích để hiểu sự khác biệt.


Xem thêm những thông tin liên quan đến chủ đề hàm lambda trong python là gì

Lambda Expressions & Anonymous Functions || Python Tutorial || Learn Python Programming

  • Tác giả: Socratica
  • Ngày đăng: 2017-09-11
  • Đánh giá: 4 ⭐ ( 3318 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lambda expressions – also known as “anonymous functions” – allow you to create and use a function in a single line. They are useful when you need a short function that you will only use once. For example, when using the map, filter and sort methods.

    Please SUBSCRIBE: http://bit.ly/SocraticaSubscribe

    This video was made possible with the help of our Patrons on Patreon! We would especially like to recognize the generosity of our VIP Patron, Austin Anderson. We’re so thankful for your support, Austin!

    To learn Python, start our Python Playlist HERE:
    http://bit.ly/PythonHelloWorld

    ♦♦♦♦♦♦♦♦♦♦

    We recommend:
    Python Cookbook, Third edition from O’Reilly
    http://amzn.to/2sCNYlZ

    The Mythical Man Month – Essays on Software Engineering & Project Management
    http://amzn.to/2tYdNeP

    Shop Amazon Used Textbooks – Save up to 90%
    http://amzn.to/2pllk4B

    ♦♦♦♦♦♦♦♦♦♦

    Ways to support our channel:

    ► Join our Patreon : https://www.patreon.com/socratica
    ► Make a one-time PayPal donation: https://www.paypal.me/socratica
    ► We also accept Bitcoin @ 1EttYyGwJmpy9bLY2UcmEqMJuBfaZ1HdG9

    Thank you!

    ♦♦♦♦♦♦♦♦♦♦

    Connect with us!

    Facebook: https://www.facebook.com/SocraticaStudios/
    Instagram: https://www.instagram.com/SocraticaStudios/
    Twitter: https://twitter.com/Socratica

    ♦♦♦♦♦♦♦♦♦♦

    Python instructor: Ulka Simone Mohanty (@ulkam on Twitter)
    Written & Produced by Michael Harrison (@mlh496 on Twitter)

    ♦♦♦♦♦♦♦♦♦♦

Lambda Function(Hàm ẩn danh) trong Python

  • Tác giả: viblo.asia
  • Đánh giá: 3 ⭐ ( 2010 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về Lambda Function còn được gọi là các hàm ẩn danh.Mình sẽ giải thích cho các bạn hiểu về khái niệm của chúng là gì, cú pháp và cách xử…

Tìm hiểu Lambda trong 5 phút

  • Tác giả: laptrinhvien.net
  • Đánh giá: 3 ⭐ ( 5128 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lambda là tính năng cao cấp trong Python. Thế nên, hôm nay mình với bạn sẽ cùng tìm hiểu một chút về hàm Lambda nhé.

Hàm lambda trong Python

  • Tác giả: freetuts.net
  • Đánh giá: 3 ⭐ ( 8740 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài viết này chúng ta sẽ tìm hiểu hàm lambda trong Python, nó còn được gọi là hàm ẩn danh trong Python. Đây là cách tạo hàm ngắn gọn và không có tên.

Lambda trong Python – Bật mí những điều bạn chưa biết về hàm Lambda

  • Tác giả: t3h.com.vn
  • Đánh giá: 3 ⭐ ( 4316 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nếu bạn còn chưa biết biểu thức Lambda là gì, cách sử dụng chúng ra sao và cú pháp của hàm Lambda trong Python là gì thì cùng tìm hiểu ngay qua bài viết sau

Python-Ngôn ngữ lập trình thông dụng

  • Tác giả: pythonnangcao.com
  • Đánh giá: 5 ⭐ ( 1586 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Tìm hiểu về hàm ẩn danh Lambda

  • Tác giả: t3h.edu.vn
  • Đánh giá: 3 ⭐ ( 5322 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nếu bạn còn chưa biết biểu thức Lambda là gì, cách sử dụng chúng ra sao và cú pháp của hàm Lambda trong Python là gì thì cùng tìm hiểu ngay qua bài viết dưới đây.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php