Trong hướng dẫn này, chúng tôi sẽ định nghĩa các hàm lambda trong Python và khám phá những ưu điểm và hạn chế của việc sử dụng chúng.

Bạn đang xem : Hướng dẫn chức năng python lambda

Ngày 9 tháng 3 năm 2022

Hướng dẫn: Các hàm Lambda trong Python

Các hàm Lambda trong Python

Trong hướng dẫn này, chúng tôi sẽ định nghĩa các hàm lambda trong Python và khám phá những ưu điểm và hạn chế của việc sử dụng chúng.

Hàm Lambda trong Python là gì?

Một hàm lambda là một hàm ẩn danh (tức là được định nghĩa mà không có tên) có thể nhận bất kỳ số lượng đối số nào nhưng không giống như các hàm thông thường, chỉ đánh giá và trả về một biểu thức.

Một hàm lambda trong Python có cú pháp sau:

tham số lambda: biểu thức

Giải phẫu của một hàm lambda bao gồm ba yếu tố:

  • Từ khoá lambda – một dạng tương tự của def trong các hàm thông thường
  • Tham số – hỗ trợ chuyển vị trí và từ khóa
    đối số, giống như các hàm bình thường
  • body – biểu thức cho các tham số nhất định đang được đánh giá
    với hàm lambda

Lưu ý rằng, không giống như một hàm thông thường, chúng tôi không đặt các tham số của một hàm lambda trong dấu ngoặc đơn. Nếu một hàm lambda có hai hoặc nhiều tham số, chúng tôi sẽ liệt kê chúng bằng dấu phẩy.

Chúng tôi sử dụng hàm lambda để đánh giá chỉ một biểu thức ngắn (lý tưởng là một dòng đơn) và chỉ một lần, có nghĩa là chúng tôi sẽ không áp dụng hàm này sau này. Thông thường, chúng tôi truyền một hàm lambda làm đối số cho một hàm bậc cao hơn (hàm nhận các hàm khác làm đối số), chẳng hạn như các hàm tích hợp sẵn trong Python như filter () , map () hoặc Reduce () .

Cách hoạt động của hàm Lambda trong Python

Hãy xem một ví dụ đơn giản về hàm lambda:

  lambda x: x + 1  
  & lt; function __main __. & lt; lambda & gt; (x) & gt;  

Hàm lambda ở trên nhận một đối số duy nhất, tăng nó lên 1 và trả về kết quả. Đây là phiên bản đơn giản hơn của hàm bình thường sau đây với các từ khóa def return :

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

Tuy nhiên, hiện tại, hàm lambda của chúng tôi lambda x: x + 1 chỉ tạo một đối tượng hàm và không trả về bất kỳ thứ gì. Chúng tôi mong đợi điều này: chúng tôi đã không cung cấp bất kỳ giá trị nào (một đối số) cho tham số x của nó. Trước tiên, hãy chỉ định một biến, chuyển nó vào hàm lambda và xem những gì chúng ta nhận được lần này:

  a = 2
    print (lambda x: a + 1)  
  & lt; function & lt; lambda & gt; tại 0x00000250CB0A5820 & gt;  

Thay vì trả về 3 , như chúng ta có thể mong đợi, hàm lambda của chúng ta đã trả về chính đối tượng hàm và vị trí bộ nhớ của nó. Thật vậy, đây không phải là cách đúng để gọi một hàm lambda. Để truyền một đối số cho một hàm lambda, thực thi nó và trả về kết quả, chúng ta nên sử dụng cú pháp sau:

  (lambda x: x + 1) (2)  
  3  

Lưu ý rằng mặc dù tham số của hàm lambda của chúng tôi không được bao quanh bởi dấu ngoặc đơn, nhưng khi chúng tôi gọi nó, chúng tôi sẽ thêm dấu ngoặc đơn xung quanh toàn bộ cấu trúc của hàm lambda và xung quanh đối số mà chúng tôi đã chuyển cho nó.

Một điều khác cần lưu ý trong đoạn mã trên là với một hàm lambda, chúng ta có thể thực thi hàm ngay sau khi tạo và nhận kết quả. Đây là cái gọi là thực thi hàm được gọi ngay lập tức (hoặc IIFE ).

Chúng ta có thể tạo một hàm lambda với nhiều tham số. Trong trường hợp này, chúng ta phân tách các tham số trong định nghĩa hàm bằng dấu phẩy. Khi chúng tôi thực thi một hàm lambda như vậy, chúng tôi liệt kê các đối số tương ứng theo cùng một thứ tự và phân tách chúng bằng dấu phẩy:

  (lambda x, y, z: x + y + z) (3, 8, 1)  
  12  

Cũng có thể sử dụng hàm lambda để thực hiện các hoạt động có điều kiện. Dưới đây là một tương tự lambda cho một hàm if-else đơn giản:

  print ((lambda x: x if (x & gt; 10) else 10) (5))  
 print ((lambda x: x if (x & gt; 10) else 10) (12))  
  10
    12  

Nếu có nhiều điều kiện (if-elif-… -else), chúng ta phải lồng chúng:

  (lambda x: x * 10 if x & gt; 10 else (x * 5 if x & lt; 5 else x)) (11)  
  110  

Vấn đề với cách tiếp cận này là đã có một điều kiện lồng nhau, mã trở nên khó đọc, như chúng ta có thể thấy ở trên. Trong những tình huống như vậy, một hàm thông thường với tập hợp các điều kiện if-elif-… -else sẽ là lựa chọn tốt hơn một hàm lambda. Thật vậy, chúng ta có thể viết hàm lambda từ ví dụ trên theo cách sau:

  def check_conditions (x):
        nếu x & gt; 10:
            trả về x * 10
        elif x & lt; 5:
            trả về x * 5
        khác:
            trả lại x

    check_conditions (11)  
  110  

Mặc dù hàm trên kéo dài nhiều dòng hơn hàm lambda tương ứng, nhưng nó vẫn dễ đọc hơn nhiều.

Xem Thêm  Kích thước hộp CSS - hộp định cỡ hộp html viền hộp

Chúng ta có thể gán một hàm lambda cho một biến và sau đó gọi biến đó như một hàm bình thường:

  increment = lambda x: x + 1
    gia số (2)  
  3  

Tuy nhiên, theo hướng dẫn kiểu PEP 8 cho mã Python:

Việc sử dụng câu lệnh gán sẽ loại bỏ lợi ích duy nhất mà một biểu thức lambda có thể mang lại so với một câu lệnh def rõ ràng (tức là nó có thể được nhúng bên trong một biểu thức lớn hơn).

Vì vậy, nếu chúng ta thực sự cần lưu trữ một hàm để sử dụng thêm, thay vì gán một hàm lambda cho một biến, tốt hơn chúng ta nên xác định một hàm bình thường tương đương.

Các ứng dụng của hàm Lambda trong Python

Lambda với hàm filter ()

Chúng tôi sử dụng hàm filter () trong Python để chọn một số mục nhất định từ
có thể lặp lại (như danh sách, tập hợp, bộ giá trị, Chuỗi, v.v.) dựa trên
được xác định trước
tiêu chuẩn. Cần có hai đối số:

  • Một hàm xác định các tiêu chí lọc
  • Có thể lặp lại mà hàm chạy trên đó

Kết quả của thao tác này, chúng tôi nhận được một đối tượng bộ lọc:

  lst = [33, 3, 22, 2, 11, 1]
    bộ lọc (lambda x: x & gt; 10, lst)  
  & lt; lọc ở 0x250cb090520 & gt;  

Để nhận được một đối tượng có thể lặp lại mới từ đối tượng bộ lọc, với tất cả các mục từ đối tượng có thể lặp lại ban đầu đáp ứng các tiêu chí được xác định trước, chúng ta cần chuyển đối tượng bộ lọc vào hàm tương ứng của thư viện chuẩn Python: list () , tuple () , set () , frozenset () hoặc sorted () ( để trả về danh sách đã sắp xếp).

Hãy lọc danh sách các số chỉ chọn các số lớn hơn 10 và trả về một danh sách được sắp xếp theo thứ tự tăng dần:

  lst = [33, 3, 22, 2, 11, 1]
    đã sắp xếp (bộ lọc (lambda x: x & gt; 10, lst))  
  [11, 22, 33]  

Chúng tôi không phải tạo đối tượng có thể lặp lại mới cùng loại với đối tượng ban đầu. Ngoài ra, chúng tôi có thể lưu trữ kết quả của thao tác này trong một biến:

  lst = [33, 3, 22, 2, 11, 1]
    tpl = tuple (bộ lọc (lambda x: x & gt; 10, lst))
    tpl  
  (33, 22, 11)  

Lambda với hàm map ()

Chúng tôi sử dụng hàm map () trong Python để thực hiện một thao tác nhất định trên từng mục của một tệp có thể lặp lại. Cú pháp của nó giống với filter () : một hàm để thực hiện và một hàm có thể lặp lại mà hàm này áp dụng. Hàm map () trả về một đối tượng bản đồ, từ đó chúng ta có thể nhận được một đối tượng có thể lặp lại mới bằng cách chuyển đối tượng này vào hàm Python tương ứng: list () , tuple () , set () , frozenset () hoặc sorted () .

Cũng như với hàm filter () , chúng ta có thể trích xuất một kiểu có thể lặp lại khác với kiểu gốc từ một đối tượng bản đồ và cũng có thể gán nó cho một biến. Dưới đây là ví dụ về việc sử dụng hàm map () để nhân từng mục trong danh sách với 10 và xuất các giá trị được ánh xạ dưới dạng một bộ được gán cho một biến tpl :

  lst = [1, 2, 3, 4, 5]
    print (bản đồ (lambda x: x * 10, lst))
    tpl = tuple (bản đồ (lambda x: x * 10, lst))
    tpl  
  & lt; đối tượng bản đồ tại 0x00000250CB0D5F40 & gt;

    (10, 20, 30, 40, 50)  

Một điểm khác biệt quan trọng giữa map () filter ()Các hàm là hàm đầu tiên luôn trả về giá trị có thể lặp lại của cùng một phần mười so với hàm ban đầu. Vì vậy, vì các đối tượng Dòng gấu trúc cũng có thể lặp lại, chúng ta có thể áp dụng hàm map () trên cột DataFrame để tạo một cột mới:

  nhập gấu trúc dưới dạng pd
    df = pd.DataFrame ({'col1': [1, 2, 3, 4, 5], 'col2': [0, 0, 0, 0, 0]})
    in (df)
    df ['col3'] = df ['col1']. map (lambda x: x * 10)
    df  
  col1 col2
0 1 0
1 2 0
2 3 0
3 4 0
4 5 0

   col1 col2 col3
0 1 0 10
1 2 0 20
2 3 0 30
3 4 0 40
4 5 0 50  

Lưu ý rằng để có được kết quả tương tự trong trường hợp trên, bạn cũng có thể sử dụng hàm apply () :

  df ['col3'] = df ['col1']. apply (lambda x: x * 10)
    df  
  col1 col2 col3
0 1 0 10
1 2 0 20
2 3 0 30
3 4 0 40
4 5 0 50  

Chúng tôi cũng có thể tạo một cột DataFrame mới dựa trên một số điều kiện cho một cột khác. Một lần nữa, đối với đoạn mã bên dưới, chúng ta có thể sử dụng thay thế cho các hàm map () hoặc apply () :

  df ['col4'] = df ['col3']. map (lambda x: 30 nếu x & lt; 30 else x)
    df  
  col1 col2 col3 col4
0 1 0 10 30
1 2 0 20 30
2 3 0 30 30
3 4 0 40 40
4 5 0 50 50  

Lambda với hàm Reduce ()

Hàm Reduce () có liên quan đến mô-đun functools Python và nó hoạt động theo cách sau:

  1. Hoạt động trên hai mục đầu tiên của một tệp có thể lặp lại và lưu kết quả
  2. Hoạt động trên kết quả đã lưu và mục tiếp theo của kết quả có thể lặp lại
  3. Tiền thu được theo cách này qua các cặp giá trị cho đến khi tất cả các mục của
    có thể lặp lại được sử dụng
Xem Thêm  Định vị CSS - Ví dụ về Vị trí Tuyệt đối và Tương đối - css tương đối trên cùng bên trái

Hàm này có hai tham số giống như hai hàm trước: một hàm và một hàm có thể lặp. Tuy nhiên, không giống như các hàm trước đó, hàm này không cần phải được chuyển cho bất kỳ hàm nào khác và trả về trực tiếp giá trị vô hướng kết quả:

  từ functools nhập giảm
    lst = [1, 2, 3, 4, 5]
    giảm (lambda x, y: x + y, lst)  
  15  

Đoạn mã trên cho thấy hàm Reduce () đang hoạt động khi chúng tôi sử dụng nó để tính tổng của một danh sách (mặc dù đối với một thao tác đơn giản như vậy, chúng tôi sẽ sử dụng một giải pháp tốt hơn: sum (lst) ).

Lưu ý rằng hàm Reduce () luôn yêu cầu hàm lambda có chính xác hai tham số – và chúng tôi cũng phải nhập nó trước từ mô-đun functools Python.

Ưu và nhược điểm của hàm Lambda trong Python

Ưu điểm

  • Đó là lựa chọn lý tưởng để đánh giá một biểu thức
    chỉ được đánh giá một lần.
  • Nó có thể được gọi ngay sau khi nó được xác định.
  • Cú pháp của nó nhỏ gọn hơn so với một
    bình thường tương ứng
    chức năng.
  • Nó có thể được chuyển dưới dạng tham số cho một hàm bậc cao hơn, như
    filter () , map () Reduce () .

Nhược điểm

  • Nó không thể thực hiện nhiều biểu thức.
  • Nó có thể dễ dàng trở nên cồng kềnh, chẳng hạn như khi nó
    bao gồm chu kỳ if-elif-… -else.
  • Nó không được chứa bất kỳ phép gán biến nào (ví dụ: lambda x: x = 0
    sẽ ném ra một SyntaxError ).
  • Chúng tôi không thể cung cấp chuỗi tài liệu cho một hàm lambda.

Kết luận

Để tóm tắt, chúng tôi đã thảo luận chi tiết về nhiều khía cạnh của việc xác định và sử dụng các hàm lambda trong Python:

  • Hàm lambda khác với hàm Python bình thường như thế nào
  • Cú pháp và cấu trúc của một hàm lambda trong Python
  • Khi nào sử dụng hàm lambda
  • Cách hoạt động của một hàm lambda
  • Cách gọi một hàm lambda
  • Định nghĩa về thực thi hàm được gọi (IIFE)
  • Cách thực hiện các phép toán có điều kiện với hàm lambda, cách
    lồng ghép nhiều điều kiện và tại sao chúng ta nên tránh nó
  • Tại sao chúng ta nên tránh gán một hàm lambda cho một biến
  • Cách sử dụng hàm lambda với hàm filter ()
  • Cách sử dụng hàm lambda với hàm map ()
  • Cách chúng tôi có thể tạo một cột mới trong DataFrame gấu trúc bằng cách sử dụng
    Hàm map () với một hàm lambda được truyền cho nó – và một
    chức năng thay thế để sử dụng trong những trường hợp như vậy
  • Cách sử dụng hàm lambda với hàm Reduce ()
  • Ưu và nhược điểm của việc sử dụng hàm lambda trên Python
    thông thường
    chức năng
Xem Thêm  Phương pháp Math.Floor (Hệ thống) - math.floor làm gì

Hy vọng rằng hướng dẫn này đã giúp làm cho khái niệm có vẻ đáng sợ về hàm lambda trong Python trở nên rõ ràng và dễ áp ​​dụng hơn!

Elena Kosourova

Giới thiệu về tác giả

Elena Kosourova

Elena là Nhà địa chất Dầu khí và quản lý cộng đồng tại Dataquest. Bạn có thể thấy cô ấy trò chuyện trực tuyến với những người đam mê dữ liệu và viết các bài hướng dẫn về Python.


Xem thêm những thông tin liên quan đến chủ đề hướng dẫn hàm python lambda

Hàm Lambda là gì ? Cách sử dụng Lambda trong hàm Map, Filter, Reduce | Python Cơ Bản #12

alt

  • Tác giả: CodeXplore
  • Ngày đăng: 2020-10-14
  • Đánh giá: 4 ⭐ ( 8162 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hello Diu Túp, hôm nay chúng mình sẽ cùng tìm hiểu về Hàm Lambda trong Python là gì ? Khi nào sử dụng Lambda nhé các bạn 🤩 !

    GitHub Repo trong Video (Files bắt đầu vs 12):
    https://github.com/CodexploreRepo/Python_Basics_Tutorial

    [0:00] Overview Nội Dung trong Video này 👋 👋
    [2:30] Hướng Dẫn Cài Đặt Visual Studio Code cho Lập Trình Python
    Step 1: Hướng Dẫn Cài Đặt Visual Studio Code
    Link: https://youtu.be/QQ_NmIJjg_A
    Step 2: Hướng Dẫn Cài Đặt Python Interpreter (Trình Thông Dịch Python)
    Link: https://youtu.be/nNrpyymspzM

    [3:00] Hàm Lambda trong Python là gì ?
    Lambda là một anonymous function (hàm ẩn danh) nó có thể khai báo, định nghĩa ở bất kỳ đâu và không có khả năng tái sử dụng.
    Lambda chỉ tồn tại trong phạm vi của biến mà nó được định nghĩa, vì vậy nếu như biến đó vượt ra ngoài phạm vi thì hàm này cũng không còn tác dụng nữa.
    Lambda thường được dùng để gán vào biến, hay được gán vào hàm, class như một tham số.

    [7:25] Cách Sử dụng hàm Lambda trong hàm sorted
    [13:00] Cách Sử dụng hàm Lambda trong các hàm Map, Filter, và Reduce

    ————- ✪ About CodeXplore Channel ✪ ————
    CodeXplore là một platform chia sẻ kiến thức về Lập Trình [Coding] dành cho các bạn trẻ Việt Nam từ một cựu du học sinh Sing, hiện đang sống và làm việc tại Singapore.

    Channel của mình sẽ focus vào các chủ đề sau:
    ► [Code] Full-Stack Web Development (HTML, CSS, JavaScript, Node JS và React JS) ☞ Future Projects: Deno
    ► [Code] Coding (Python & JavaScript) Interview Preparation (Cấu Trúc Dữ Liệu và Thuật Toán & LeetCode Solutions)

    ► [Xplore] Travel Vlog (Chia sẻ kinh nghiệm đi du lịch và trải nghiệm)

    ——————
    ✪ Business inquiries: codexplore.channel@gmail.com
    ✪ Subscribe: https://bit.ly/youtube_codexplore

    ➥ CodeXplore Social Links:
    Fanpage: https://www.facebook.com/CodeXplore.dev/
    Instagram: https://www.instagram.com/codexplore.dev/
    GitHub: https://github.com/CodexploreRepo

    ———————————————-/————-
    © Bản quyền thuộc về CodeXplore
    © Copyright by CodeXplore ☞ Do not Reup

    HàmLambda HàmẨnDanh PythonCơBản

Tìm hiểu cách sử dụng Lambda Function trong Python

  • Tác giả: itzone.com.vn
  • Đánh giá: 3 ⭐ ( 1298 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The ITZone platform Vietnam is the community for anyone interested in news, training seminars, presentations etc in the IT industry

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á: 4 ⭐ ( 8423 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

LAMBDA là gì? Tìm hiểu về biểu thức Lambda

  • Tác giả: thuthuat.taimienphi.vn
  • Đánh giá: 3 ⭐ ( 8701 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài viết này, Taimienphi.vn sẽ cùng bạn tìm hiểu về hàm vô danh hay còn gọi là hàm Lambda trong Python. Hàm Lambda là gì, cú pháp hàm Lambda như thế nào, và cách sử dụng hàm Lambda với ví dụ kèm theo ra sao, tất cả sẽ giải đáp ngay sau đây.

Router (4): phương thức vô danh, hàm lambda

  • Tác giả: tuhocict.com
  • Đánh giá: 5 ⭐ ( 5054 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài học này chúng ta tiếp tục các nội dung liên quan đến lớp Router, bao gồm sử dụng phương thức vô danh, hàm lambda, hàm cục bộ, và mẫu thiết kế.

Hàm LAMBDA

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

Hàm trong Python

  • Tác giả: hoclaptrinh.vn
  • Đánh giá: 3 ⭐ ( 5817 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong các chương trước, bạn đã làm quen với một số hàm đã được xây dựng sẵn trong Python, điển hình như hàm print().

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