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 : python cách sử dụng các hàm 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 sẽ 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  Thuộc tính đệm CSS - css body padding top

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  Cách tạo bảng trong SQL - sql để tạo bảng

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  Tệp SVG: Chúng là gì và Cách tạo một tệp - hình ảnh svg là 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ề một 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ủ đề python làm thế nào để sử dụng các hàm lambda

Intermediate Python Tutorial #5 – Lambda Functions

alt

  • Tác giả: Tech With Tim
  • Ngày đăng: 2018-10-11
  • Đánh giá: 4 ⭐ ( 5734 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Intermediate Python Tutorial 5 – Lambda Functions

    Today’s Topic: lambda functions, these are known as anonymous functions as you do not have to define them at the beginning of your program. They operate the same as regular functions but only occupy one line and contain a single expression.

    In this set of videos I will be explaining more advanced programming concepts and showing you intermediate-advanced tools that you can use in python. A lot of these tools will help you to solve problems/code more efficiently and will save you a ton of time!

    Text-Based Tutorial: https://techwithtim.net/tutorials/python-programming/intermediate-python-tutorials/lambda-functions/

    Twitter: https://twitter.com/TechWithTimm

    Future topics:
    6. Intro to Collections
    7. Collections: named tuple
    8. Collections: deque
    9. Collections: orderedDict
    10. Collections: defualtDict
    11. docstrings

    Want To Support This Channel?
    Bitcoin: 1PbkAYLFaJBgjbKn2ptGyBz65xWN8hJgBU
    Ethereum: 0xdd42dbbdba60f7163fc7a840e189474b6e8bfcad
    Ripple: rD4arM9CVjQWqi8f1kxdpCgkCgEkqBgtud

    Please leave a LIKE and SUBSCRIBE for more content!

    Tags:
    – Tech With Tim
    – Python Tutorials
    – Intermediate Python Tutorials
    – Lambda
    – lambda in python
    – anonymous functions

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

  • Tác giả: t3h.edu.vn
  • Đánh giá: 4 ⭐ ( 9595 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.

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 ⭐ ( 8902 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

Hàm trong Python

  • Tác giả: viettuts.vn
  • Đánh giá: 5 ⭐ ( 6285 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hàm trong Python là một khối lệnh được tổ chức và có thể tái sử dụng, để thực hiện một hành động nào đó.Ví dụ print() là một hàm được xây dựng sẵn.

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

  • Tác giả: itzone.com.vn
  • Đánh giá: 4 ⭐ ( 1228 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

Hàm trong Python

  • Tác giả: o2.edu.vn
  • Đánh giá: 5 ⭐ ( 3223 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Để khai báo một hàm trong Python chúng ta sử dụng từ khóa def với cú pháp:

40+ bài học Python cơ bản

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 4 ⭐ ( 2089 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chuyên mục của bài viết hôm nay tìm hiểu về hàm Lambda trong Python. Chúng tôi sẽ trình bày cú pháp cơ bản của hàm Lambda và đi qua một số ví dụ để làm quen

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