Hướng dẫn can lambda be a variable name in python? - lambda có thể là một tên biến trong python không?

Tôi bắt đầu đánh giá cao giá trị của các biểu thức Lambda trong Python, đặc biệt là khi nói đến lập trình chức năng,

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
0, các chức năng trả về các chức năng, v.v. Tuy nhiên, tôi cũng đã đặt tên cho lambdas trong các chức năng vì:

Show
  • Tôi cần cùng một chức năng nhiều lần và không muốn lặp lại mã.
  • Chức năng cụ thể cho chức năng mà nó xuất hiện; Nó không cần thiết ở nơi khác.

Khi tôi gặp phải một tình huống đáp ứng các tiêu chí trên, tôi đã viết một biểu thức Lambda có tên để làm khô chức năng phạm vi khô và hẹp. Ví dụ: tôi đang viết một hàm hoạt động trên một số mảng

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
1 và tôi cần thực hiện một số chỉ mục tẻ nhạt vừa phải của tất cả các mảng được truyền cho hàm (có thể dễ dàng phù hợp trên một dòng). Tôi đã viết một biểu thức Lambda có tên để thực hiện lập chỉ mục thay vì viết toàn bộ chức năng khác hoặc sao chép/dán chỉ mục nhiều lần trong suốt định nghĩa hàm.

def fcn_operating_on_arrays(array0, array1):
    indexer = lambda a0, a1, idx: a0[idx] + a1[idx]
    
    # codecodecode
    
    indexed = indexer(array0, array1, indices)
    
    # codecodecode in which other arrays are created and require `indexer`
    
    return the_answer

Đây có phải là một sự lạm dụng của Python's Lambdas? Tôi có nên hút nó lên và xác định một chức năng riêng biệt không?

Chỉnh sửa

Có lẽ giá trị liên kết chức năng bên trong chức năng.

Sử dụng lambdas với các chức năng bậc cao hoặc các chức năng khóa Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: How to Use Python Lambda Functions

Nếu bạn có một xu hướng cho toán học, bạn có thể có một số niềm vui khi khám phá thế giới hấp dẫn của tính toán Lambda.

Python lambdas giống như muối. Một nhúm trong thư rác, giăm bông và trứng của bạn sẽ tăng cường hương vị, nhưng quá nhiều sẽ làm hỏng món ăn.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Cách sử dụng các chức năng của Python Lambda

  • Lambda có phải là một tên biến trong Python không?
  • 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. Đó là một chức năng nhỏ và bị hạn chế không có nhiều hơn một dòng. Giống như một hàm bình thường, hàm lambda có thể có nhiều đối số với một biểu thức.
  • Lambda có thể được gán cho một biến không?
  • Tạo hàm Lambda mà toán tử Lambda không thể có bất kỳ câu lệnh nào và nó trả về một đối tượng hàm mà chúng ta có thể gán cho bất kỳ biến nào.
  • Làm thế nào để bạn đặt tên cho một lambda trong Python?

Hàm Lambda, còn được gọi là 'Hàm ẩn danh' giống như hàm Python thông thường nhưng có thể được xác định mà không có tên. Mặc dù các hàm bình thường được xác định bằng cách sử dụng từ khóa DEF, các hàm ẩn danh được xác định bằng cách sử dụng từ khóa Lambda. Tuy nhiên, chúng bị giới hạn trong một dòng biểu thức duy nhất.

Bạn có thể đặt tên cho một lambda?

Lưu ý rằng bạn không thể đặt tên cho các hàm Lambda, vì chúng là ẩn danh (không có tên) theo định nghĩa. Một hàm Lambda có thể có nhiều đối số như bạn cần sử dụng, nhưng cơ thể phải là một biểu thức duy nhất.

Python và các ngôn ngữ khác như Java, C#và thậm chí C ++ đã có các hàm Lambda được thêm vào cú pháp của chúng, trong khi các ngôn ngữ như Lisp hoặc họ ngôn ngữ ML, Haskell, OCAML và F#, sử dụng Lambdas làm khái niệm cốt lõi.

Lịch sử

Nhà thờ Alonzo chính thức hóa Tính toán Lambda, một ngôn ngữ dựa trên sự trừu tượng thuần túy, vào những năm 1930. Các chức năng của Lambda cũng được gọi là Trừu tượng Lambda, một tài liệu tham khảo trực tiếp đến mô hình trừu tượng của sáng tạo ban đầu của Alonzo Church.

Tính toán Lambda có thể mã hóa bất kỳ tính toán nào. Nó hoàn thành, nhưng trái với khái niệm về một cỗ máy Turing, nó là tinh khiết và không giữ bất kỳ trạng thái nào.

Các ngôn ngữ chức năng có nguồn gốc từ logic toán học và tính toán Lambda, trong khi các ngôn ngữ lập trình bắt buộc nắm lấy mô hình tính toán dựa trên trạng thái được phát minh bởi Alan Turing. Hai mô hình tính toán, máy tính Lambda và máy Turing, có thể được dịch sang nhau. Sự tương đương này được gọi là giả thuyết của nhà thờ.

Các ngôn ngữ chức năng trực tiếp thừa hưởng triết lý tính toán Lambda, áp dụng một cách tiếp cận tuyên bố của lập trình nhấn mạnh sự trừu tượng, chuyển đổi dữ liệu, thành phần và độ tinh khiết (không có trạng thái và không có tác dụng phụ). Ví dụ về các ngôn ngữ chức năng bao gồm Haskell, Lisp hoặc Erlang.

Ngược lại, máy Turing đã dẫn đến lập trình bắt buộc được tìm thấy bằng các ngôn ngữ như Fortran, C hoặc Python.

Phong cách bắt buộc bao gồm lập trình với các tuyên bố, thúc đẩy luồng của chương trình từng bước với các hướng dẫn chi tiết. Cách tiếp cận này thúc đẩy đột biến và yêu cầu quản lý trạng thái.

Sự tách biệt trong cả hai gia đình trình bày một số sắc thái, vì một số ngôn ngữ chức năng kết hợp các tính năng bắt buộc, như OCAML, trong khi các đặc điểm chức năng đã thấm vào gia đình ngôn ngữ bắt buộc nói riêng với việc giới thiệu các hàm Lambda trong Java hoặc Python.

Python vốn không phải là ngôn ngữ chức năng, nhưng nó đã áp dụng một số khái niệm chức năng từ rất sớm. Vào tháng 1 năm 1994,

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2,
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
3,
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
4 và toán tử
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 đã được thêm vào ngôn ngữ.

Ví dụ đầu tiên

Dưới đây là một vài ví dụ để cung cấp cho bạn sự thèm ăn cho một số mã python, kiểu chức năng.

Hàm nhận dạng, một hàm trả về đối số của nó, được biểu thị bằng định nghĩa hàm Python tiêu chuẩn bằng cách sử dụng từ khóa

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
6 như sau:

>>>

>>> def identity(x):
...     return x

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
7 lấy một đối số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và trả lại khi gọi.

Ngược lại, nếu bạn sử dụng cấu trúc Python Lambda, bạn sẽ nhận được những điều sau:

Trong ví dụ trên, biểu thức bao gồm:

  • Từ khóa:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    5
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    5
  • Một biến ràng buộc:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8
  • Một cơ thể:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8

Bạn có thể viết một ví dụ được xây dựng hơn một chút, một hàm thêm

>>> lambda x, y: x + y
2 vào một đối số, như sau:

Bạn có thể áp dụng chức năng ở trên cho một đối số bằng cách xung quanh hàm và đối số của nó với dấu ngoặc đơn:

>>>

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

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
7 lấy một đối số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và trả lại khi gọi.

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

Ngược lại, nếu bạn sử dụng cấu trúc Python Lambda, bạn sẽ nhận được những điều sau:

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
7 lấy một đối số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và trả lại khi gọi.

def add_one(x):
    return x + 1

Ngược lại, nếu bạn sử dụng cấu trúc Python Lambda, bạn sẽ nhận được những điều sau:

>>>

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
7 lấy một đối số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và trả lại khi gọi.

Ngược lại, nếu bạn sử dụng cấu trúc Python Lambda, bạn sẽ nhận được những điều sau:

Trong ví dụ trên, biểu thức bao gồm:

  • Từ khóa:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    5
  • Một biến ràng buộc:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8
  • Một cơ thể:
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8
  • Bạn có thể viết một ví dụ được xây dựng hơn một chút, một hàm thêm
    >>> lambda x, y: x + y
    
    2 vào một đối số, như sau:
  • Bạn có thể áp dụng chức năng ở trên cho một đối số bằng cách xung quanh hàm và đối số của nó với dấu ngoặc đơn:
  • Giảm là một chiến lược tính toán lambda để tính toán giá trị của biểu thức. Trong ví dụ hiện tại, nó bao gồm thay thế biến ràng buộc
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8 bằng đối số
    >>> lambda x, y: x + y
    
    4:

Bởi vì một hàm Lambda là một biểu thức, nó có thể được đặt tên. Do đó, bạn có thể viết mã trước như sau:lambda function.

Hàm Lambda ở trên tương đương với việc viết bài này:

>>>

>>> lambda x, y: x + y

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
7 lấy một đối số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và trả lại khi gọi.

Ngược lại, nếu bạn sử dụng cấu trúc Python Lambda, bạn sẽ nhận được những điều sau:

Ví dụ trên là tận dụng tính năng chỉ dành cho trình thông dịch tương tác được cung cấp thông qua dấu gạch dưới (

>>> (lambda x, y: x + y)(2, 3)
5
1). Xem ghi chú dưới đây để biết thêm chi tiết.

Bạn không thể viết mã tương tự trong mô -đun Python. Hãy xem xét

>>> (lambda x, y: x + y)(2, 3)
5
1 trong phiên dịch viên là một tác dụng phụ mà bạn đã tận dụng. Trong một mô -đun Python, bạn sẽ gán một tên cho Lambda hoặc bạn sẽ chuyển Lambda cho một chức năng. Bạn sẽ sử dụng hai cách tiếp cận đó sau trong bài viết này.

Một mẫu khác được sử dụng trong các ngôn ngữ khác như JavaScript là ngay lập tức thực hiện hàm Python Lambda. Điều này được gọi là một biểu thức chức năng được gọi ngay lập tức (iife, phát âm là iff iffy). Đây là một ví dụ:Immediately Invoked Function Expression (IIFE, pronounce “iffy”). Here’s an example:

>>>

>>> (lambda x, y: x + y)(2, 3)
5

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 trong Python như một cách ngắn hơn để xác định hàm.

Python không khuyến khích sử dụng các biểu thức Lambda được gọi ngay lập tức. Nó chỉ đơn giản là kết quả từ một biểu thức lambda có thể gọi được, không giống như cơ thể của một chức năng bình thường.

Các hàm Lambda thường được sử dụng với các hàm bậc cao hơn, lấy một hoặc nhiều hàm làm đối số hoặc trả về một hoặc nhiều hàm.

Hàm Lambda có thể là hàm bậc cao hơn bằng cách lấy hàm (bình thường hoặc lambda) như một đối số như trong ví dụ sau:

>>>

>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 5 trong Python như một cách ngắn hơn để xác định hàm.

Python không khuyến khích sử dụng các biểu thức Lambda được gọi ngay lập tức. Nó chỉ đơn giản là kết quả từ một biểu thức lambda có thể gọi được, không giống như cơ thể của một chức năng bình thường.

Các hàm Lambda thường được sử dụng với các hàm bậc cao hơn, lấy một hoặc nhiều hàm làm đối số hoặc trả về một hoặc nhiều hàm.

Hàm Lambda có thể là hàm bậc cao hơn bằng cách lấy hàm (bình thường hoặc lambda) như một đối số như trong ví dụ sau:

Python phơi bày các hàm bậc cao hơn là các hàm tích hợp hoặc trong thư viện tiêu chuẩn. Các ví dụ bao gồm >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 2, >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 3, >>> (lambda x, y: x + y)(2, 3) 5 9, cũng như các chức năng chính như >>> high_ord_func = lambda x, func: x + func(x) >>> high_ord_func(2, lambda x: x * x) 6 >>> high_ord_func(2, lambda x: x + 3) 7 0, >>> high_ord_func = lambda x, func: x + func(x) >>> high_ord_func(2, lambda x: x * x) 6 >>> high_ord_func(2, lambda x: x + 3) 7 1, >>> high_ord_func = lambda x, func: x + func(x) >>> high_ord_func(2, lambda x: x * x) 6 >>> high_ord_func(2, lambda x: x + 3) 7 2 và >>> high_ord_func = lambda x, func: x + func(x) >>> high_ord_func(2, lambda x: x * x) 6 >>> high_ord_func(2, lambda x: x + 3) 7 3. Bạn sẽ sử dụng các hàm Lambda cùng với các hàm bậc cao của Python trong việc sử dụng các biểu thức Lambda thích hợp.

Python Lambda và các chức năng thường xuyên

Trích dẫn này từ Câu hỏi thường gặp về thiết kế và lịch sử Python dường như tạo nên giai điệu về kỳ vọng chung liên quan đến việc sử dụng các chức năng Lambda trong Python:

>>>

>>> def identity(x):
...     return x
0

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 trong Python như một cách ngắn hơn để xác định hàm.

>>>

>>> def identity(x):
...     return x
1

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 5 trong Python như một cách ngắn hơn để xác định hàm.

Python không khuyến khích sử dụng các biểu thức Lambda được gọi ngay lập tức. Nó chỉ đơn giản là kết quả từ một biểu thức lambda có thể gọi được, không giống như cơ thể của một chức năng bình thường.

>>>

>>> def identity(x):
...     return x
2

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 trong Python như một cách ngắn hơn để xác định hàm.

>>>

>>> def identity(x):
...     return x
3

Hàm Lambda ở trên được xác định và sau đó được gọi ngay lập tức với hai đối số (

>>> lambda x, y: x + y
4 và
>>> (lambda x, y: x + y)(2, 3)
5
4). Nó trả về giá trị
>>> (lambda x, y: x + y)(2, 3)
5
5, là tổng của các đối số.

Một số ví dụ trong hướng dẫn này sử dụng định dạng này để làm nổi bật khía cạnh ẩn danh của hàm Lambda và tránh tập trung vào >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 5 trong Python như một cách ngắn hơn để xác định hàm.

Python không khuyến khích sử dụng các biểu thức Lambda được gọi ngay lập tức. Nó chỉ đơn giản là kết quả từ một biểu thức lambda có thể gọi được, không giống như cơ thể của một chức năng bình thường.

  • Các hàm Lambda thường được sử dụng với các hàm bậc cao hơn, lấy một hoặc nhiều hàm làm đối số hoặc trả về một hoặc nhiều hàm.
  • Hàm Lambda có thể là hàm bậc cao hơn bằng cách lấy hàm (bình thường hoặc lambda) như một đối số như trong ví dụ sau:
  • Python phơi bày các hàm bậc cao hơn là các hàm tích hợp hoặc trong thư viện tiêu chuẩn. Các ví dụ bao gồm
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    2,
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    3,
    >>> (lambda x, y: x + y)(2, 3)
    5
    
    9, cũng như các chức năng chính như
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    0,
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    1,
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    2 và
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    3. Bạn sẽ sử dụng các hàm Lambda cùng với các hàm bậc cao của Python trong việc sử dụng các biểu thức Lambda thích hợp.
  • Python Lambda và các chức năng thường xuyên

Trích dẫn này từ Câu hỏi thường gặp về thiết kế và lịch sử Python dường như tạo nên giai điệu về kỳ vọng chung liên quan đến việc sử dụng các chức năng Lambda trong Python:

Một hàm Lambda có thể chứa bất kỳ câu lệnh nào. Trong hàm Lambda, các câu như

>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
5,
>>> def identity(x):
...     return x
07,
>>> def identity(x):
...     return x
08 hoặc
>>> def identity(x):
...     return x
09 sẽ tăng ngoại lệ
>>> def identity(x):
...     return x
10. Ở đây, một ví dụ về việc thêm
>>> def identity(x):
...     return x
08 vào thân máy Lambda:

>>>

>>> def identity(x):
...     return x
4

Ví dụ giả định này dự định

>>> def identity(x):
...     return x
08 rằng tham số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 có giá trị
>>> lambda x, y: x + y
4. Nhưng, trình thông dịch xác định
>>> def identity(x):
...     return x
10 trong khi phân tích mã liên quan đến câu lệnh
>>> def identity(x):
...     return x
08 trong phần thân của
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5.

Biểu thức đơn

Trái ngược với một hàm bình thường, hàm Python lambda là một biểu thức duy nhất. Mặc dù, trong phần thân của

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, bạn có thể truyền biểu thức trên một số dòng bằng dấu ngoặc đơn hoặc chuỗi đa dòng, nó vẫn là một biểu thức duy nhất:

>>>

>>> def identity(x):
...     return x
5

Ví dụ giả định này dự định

>>> def identity(x):
...     return x
08 rằng tham số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 có giá trị
>>> lambda x, y: x + y
4. Nhưng, trình thông dịch xác định
>>> def identity(x):
...     return x
10 trong khi phân tích mã liên quan đến câu lệnh
>>> def identity(x):
...     return x
08 trong phần thân của
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5.

Biểu thức đơn

Trái ngược với một hàm bình thường, hàm Python lambda là một biểu thức duy nhất. Mặc dù, trong phần thân của

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, bạn có thể truyền biểu thức trên một số dòng bằng dấu ngoặc đơn hoặc chuỗi đa dòng, nó vẫn là một biểu thức duy nhất:

>>> def identity(x):
...     return x
6

Ví dụ trên trả về chuỗi

>>> def identity(x):
...     return x
19 khi đối số Lambda là lẻ và
>>> def identity(x):
...     return x
20 khi đối số là chẵn. Nó trải trên hai dòng vì nó được chứa trong một tập hợp các dấu ngoặc đơn, nhưng nó vẫn là một biểu thức duy nhất.

>>>

>>> def identity(x):
...     return x
7

Ví dụ giả định này dự định

>>> def identity(x):
...     return x
08 rằng tham số
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 có giá trị
>>> lambda x, y: x + y
4. Nhưng, trình thông dịch xác định
>>> def identity(x):
...     return x
10 trong khi phân tích mã liên quan đến câu lệnh
>>> def identity(x):
...     return x
08 trong phần thân của
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5.

Biểu thức đơn

Trái ngược với một hàm bình thường, hàm Python lambda là một biểu thức duy nhất. Mặc dù, trong phần thân của

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, bạn có thể truyền biểu thức trên một số dòng bằng dấu ngoặc đơn hoặc chuỗi đa dòng, nó vẫn là một biểu thức duy nhất:

>>>

>>> def identity(x):
...     return x
8

Ví dụ trên trả về chuỗi

>>> def identity(x):
...     return x
19 khi đối số Lambda là lẻ và
>>> def identity(x):
...     return x
20 khi đối số là chẵn. Nó trải trên hai dòng vì nó được chứa trong một tập hợp các dấu ngoặc đơn, nhưng nó vẫn là một biểu thức duy nhất.

Loại chú thích

Nếu bạn đã bắt đầu áp dụng gợi ý loại, hiện có sẵn trong Python, thì bạn có một lý do chính đáng khác để thích các chức năng bình thường hơn các chức năng của Python Lambda. Kiểm tra kiểm tra loại Python (hướng dẫn) để tìm hiểu thêm về gợi ý loại Python và kiểm tra loại. Trong hàm Lambda, không có tương đương cho các điều sau:

  • Bất kỳ loại lỗi nào với
    >>> def identity(x):
    ...     return x
    
    21 đều có thể bị bắt bởi các công cụ như
    >>> def identity(x):
    ...     return x
    
    22 hoặc
    >>> def identity(x):
    ...     return x
    
    23, trong khi đó
    >>> def identity(x):
    ...     return x
    
    10 với hàm Lambda tương đương được nâng lên khi chạy: thời gian chạy:
  • Giống như cố gắng bao gồm một tuyên bố trong Lambda, việc thêm chú thích loại ngay lập tức dẫn đến
    >>> def identity(x):
    ...     return x
    
    10 khi chạy.
  • Iifevarargs)
  • Bạn đã thấy một số ví dụ về thực thi chức năng được gọi ngay lập tức:
  • Bên ngoài phiên dịch viên Python, tính năng này có thể không được sử dụng trong thực tế. Nó có một hậu quả trực tiếp của một chức năng Lambda được gọi là được xác định. Ví dụ: điều này cho phép bạn chuyển định nghĩa của biểu thức Lambda Python cho hàm bậc cao hơn như
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    2,
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    3 hoặc
    >>> (lambda x, y: x + y)(2, 3)
    5
    
    9 hoặc chức năng chính.

Tranh luận

>>>

>>> def identity(x):
...     return x
9

Giống như một đối tượng hàm bình thường được xác định với >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 6, các biểu thức Python Lambda hỗ trợ tất cả các cách khác nhau để truyền đối số. Điêu nay bao gôm:

Lập luận vị trí

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

Đối số được đặt tên (đôi khi được gọi là đối số từ khóa)

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

Danh sách biến các đối số (thường được gọi là Varargs)

Danh sách biến các đối số từ khóa

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

Đối số chỉ từ khóa

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

Các ví dụ sau đây minh họa các tùy chọn mở cho bạn để chuyển các đối số cho các biểu thức Lambda:

Trang trí

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

Trong Python, một người trang trí là việc thực hiện một mẫu cho phép thêm một hành vi vào một chức năng hoặc một lớp. Nó thường được biểu thị bằng tiền tố cú pháp

>>> def identity(x):
...     return x
30. Đây là một ví dụ giả định:

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

Trong ví dụ trên,

>>> def identity(x):
...     return x
31 là một hàm thêm hành vi vào
>>> def identity(x):
...     return x
32, do đó gọi
>>> def identity(x):
...     return x
33 dẫn đến kết quả đầu ra sau:

>>> def identity(x):
...     return x
32 chỉ in
>>> def identity(x):
...     return x
35, nhưng người trang trí thêm một hành vi bổ sung cũng in
>>> def identity(x):
...     return x
36.

Một người trang trí có thể được áp dụng cho một lambda. Mặc dù nó không thể trang trí Lambda với cú pháp

>>> def identity(x):
...     return x
30, một người trang trí chỉ là một chức năng, vì vậy nó có thể gọi hàm Lambda:

>>> def identity(x):
...     return x
38, được trang trí với
>>> def identity(x):
...     return x
39 trên dòng 11, được gọi bằng đối số
>>> (lambda x, y: x + y)(2, 3)
5
4 trên dòng 15. Ngược lại, trên dòng 18, một hàm Lambda ngay lập tức được liên quan và nhúng vào một cuộc gọi đến
>>> def identity(x):
...     return x
41, người trang trí. Khi bạn thực thi mã ở trên, bạn có được những điều sau:

Khép kín

Đóng là một hàm trong đó mọi biến miễn phí, mọi thứ ngoại trừ các tham số, được sử dụng trong hàm đó được liên kết với một giá trị cụ thể được xác định trong phạm vi kèm theo của hàm đó. Trong thực tế, đóng cửa xác định môi trường mà chúng chạy, và do đó có thể được gọi từ bất cứ đâu.

Các khái niệm về lambdas và đóng cửa không nhất thiết phải liên quan, mặc dù các hàm Lambda có thể đóng cửa giống như cách các chức năng bình thường cũng có thể là đóng cửa. Một số ngôn ngữ có các cấu trúc đặc biệt để đóng hoặc lambda (ví dụ, Groovy với một khối mã ẩn danh là đối tượng đóng) hoặc biểu thức lambda (ví dụ, biểu thức Java Lambda với tùy chọn giới hạn để đóng).

Ở đây, một đóng cửa được xây dựng với chức năng Python bình thường:

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

>>> def identity(x):
...     return x
53 Trả về
>>> def identity(x):
...     return x
54, một hàm lồng nhau tính tổng của ba đối số:

  • >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    8 được thông qua như một đối số cho
    >>> def identity(x):
    ...     return x
    
    53.
    is passed as an argument to
    >>> def identity(x):
    ...     return x
    
    53.
  • >>> def identity(x):
    ...     return x
    
    57 là một biến cục bộ đến
    >>> def identity(x):
    ...     return x
    
    53.
    is a variable local to
    >>> def identity(x):
    ...     return x
    
    53.
  • >>> def identity(x):
    ...     return x
    
    59 là một đối số được chuyển đến
    >>> def identity(x):
    ...     return x
    
    54.
    is an argument passed to
    >>> def identity(x):
    ...     return x
    
    54.

Để kiểm tra hành vi của

>>> def identity(x):
...     return x
53 và
>>> def identity(x):
...     return x
54,
>>> def identity(x):
...     return x
53 được gọi ba lần trong vòng lặp
>>> def identity(x):
...     return x
64 in như sau:

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

Trên dòng 9 của mã,

>>> def identity(x):
...     return x
54 được trả về bởi lời mời của
>>> def identity(x):
...     return x
53 được liên kết với tên
>>> def identity(x):
...     return x
67. Trên dòng 5,
>>> def identity(x):
...     return x
54 nắm bắt
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và
>>> def identity(x):
...     return x
57 vì nó có quyền truy cập vào môi trường nhúng của nó, do đó khi gọi đóng cửa, nó có thể hoạt động trên hai biến miễn phí
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và
>>> def identity(x):
...     return x
57.

Tương tự, một

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 cũng có thể là một đóng cửa. Ở đây, ví dụ tương tự với chức năng Python Lambda:

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

Khi bạn thực thi mã ở trên, bạn có được đầu ra sau:

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

Trên dòng 6,

>>> def identity(x):
...     return x
53 trả về một lambda và gán nó cho biến
>>> def identity(x):
...     return x
67. Trên dòng 3, phần thân của hàm Lambda tham chiếu
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 và
>>> def identity(x):
...     return x
57. Biến
>>> def identity(x):
...     return x
57 có sẵn tại thời điểm định nghĩa, trong khi
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
8 được xác định trong thời gian chạy khi
>>> def identity(x):
...     return x
53 được gọi.

Trong tình huống này, cả chức năng bình thường và Lambda đều hoạt động tương tự. Trong phần tiếp theo, bạn sẽ thấy một tình huống trong đó hành vi của Lambda có thể bị lừa dối do thời gian đánh giá của nó (thời gian định nghĩa so với thời gian chạy).

Thời gian đánh giá

Trong một số tình huống liên quan đến các vòng lặp, hành vi của một chức năng Python Lambda như một sự đóng cửa có thể phản trực giác. Nó đòi hỏi sự hiểu biết khi các biến miễn phí bị ràng buộc trong bối cảnh của một lambda. Các ví dụ sau đây cho thấy sự khác biệt khi sử dụng hàm thông thường so với sử dụng Lambda Python.

Kiểm tra kịch bản trước bằng cách sử dụng chức năng thông thường:

>>>

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

Trong một hàm bình thường,

>>> def identity(x):
...     return x
81 được đánh giá ở thời điểm định nghĩa, trên dòng 9, khi hàm được thêm vào danh sách:
>>> def identity(x):
...     return x
82.

Bây giờ, với việc thực hiện cùng một logic với chức năng Lambda, hãy quan sát hành vi bất ngờ:

>>>

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

Trong một hàm bình thường,

>>> def identity(x):
...     return x
81 được đánh giá ở thời điểm định nghĩa, trên dòng 9, khi hàm được thêm vào danh sách:
>>> def identity(x):
...     return x
82.

Bây giờ, với việc thực hiện cùng một logic với chức năng Lambda, hãy quan sát hành vi bất ngờ:

>>>

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

Trong một hàm bình thường,

>>> def identity(x):
...     return x
81 được đánh giá ở thời điểm định nghĩa, trên dòng 9, khi hàm được thêm vào danh sách:
>>> def identity(x):
...     return x
82.

Bây giờ, với việc thực hiện cùng một logic với chức năng Lambda, hãy quan sát hành vi bất ngờ:

Kết quả bất ngờ xảy ra do biến miễn phí >>> def identity(x): ... return x 81, như được triển khai, bị ràng buộc tại thời điểm thực hiện của biểu thức Lambda. Hàm Python Lambda trên dòng 4 là một đóng cửa thu thập >>> def identity(x): ... return x 81, một biến miễn phí bị ràng buộc trong thời gian chạy. Khi chạy, trong khi gọi hàm >>> def identity(x): ... return x 85 trên dòng 7, giá trị của >>> def identity(x): ... return x 81 là >>> def identity(x): ... return x 87.

Để khắc phục vấn đề này, bạn có thể chỉ định biến miễn phí theo thời gian định nghĩa như sau:

>>> def identity(x):
...     return x
92

Hàm Lambda Python hoạt động giống như một hàm bình thường liên quan đến các đối số. Do đó, một tham số Lambda có thể được khởi tạo với giá trị mặc định: tham số

>>> def identity(x):
...     return x
81 lấy bên ngoài
>>> def identity(x):
...     return x
81 làm giá trị mặc định. Hàm Python Lambda có thể đã được viết là
>>> def identity(x):
...     return x
90 và có kết quả tương tự.

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

Hàm Python Lambda được gọi mà không có bất kỳ đối số nào trên dòng 7 và nó sử dụng giá trị mặc định

>>> def identity(x):
...     return x
81 được đặt tại thời gian định nghĩa.

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

Thử nghiệm Lambdas

>>> def identity(x):
...     return x
93

Mô -đun

>>> def identity(x):
...     return x
93 trích xuất mã Python tương tác từ
>>> (lambda x: x + 1)(2)
3
08 để thực hiện các thử nghiệm. Mặc dù cú pháp của các hàm Lambda Python không hỗ trợ
>>> (lambda x: x + 1)(2)
3
08 điển hình, nhưng có thể gán một chuỗi cho phần tử
>>> (lambda x: x + 1)(2)
3
10 của Lambda có tên:

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

>>> def identity(x):
...     return x
93 trong nhận xét DOC của Lambda
>>> def identity(x):
...     return x
97 mô tả các trường hợp thử nghiệm tương tự như trong phần trước.

Khi bạn thực hiện các bài kiểm tra qua

>>> (lambda x: x + 1)(2)
3
13, bạn sẽ nhận được như sau:

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

Các kết quả kiểm tra thất bại từ cùng một lỗi được giải thích trong việc thực hiện các thử nghiệm đơn vị trong phần trước.

Bạn có thể thêm một

>>> (lambda x: x + 1)(2)
3
08 vào Python Lambda thông qua một bài tập cho
>>> (lambda x: x + 1)(2)
3
10 để ghi lại hàm Lambda. Mặc dù có thể, cú pháp Python tốt hơn
>>> (lambda x: x + 1)(2)
3
08 cho các chức năng bình thường so với các hàm Lambda.

Để biết tổng quan toàn diện về thử nghiệm đơn vị trong Python, bạn có thể muốn tham khảo bắt đầu với thử nghiệm trong Python.

Biểu hiện Lambda lạm dụng

Một số ví dụ trong bài viết này, nếu được viết trong bối cảnh mã Python chuyên nghiệp, sẽ đủ điều kiện là lạm dụng.

Nếu bạn thấy mình đang cố gắng vượt qua một cái gì đó mà một biểu thức Lambda không hỗ trợ, thì đây có lẽ là một dấu hiệu cho thấy một chức năng bình thường sẽ phù hợp hơn.

>>> (lambda x: x + 1)(2)
3
08 cho biểu thức lambda trong phần trước là một ví dụ tốt. Cố gắng khắc phục thực tế rằng chức năng Python Lambda không hỗ trợ các câu lệnh là một lá cờ đỏ khác.

Các phần tiếp theo minh họa một vài ví dụ về việc sử dụng Lambda nên tránh. Những ví dụ đó có thể là các tình huống, trong bối cảnh của Python Lambda, mã thể hiện mô hình sau:

  • Nó không theo hướng dẫn phong cách Python (PEP 8)
  • Nó cồng kềnh và khó đọc.
  • Nó thông minh không cần thiết với chi phí của khả năng đọc khó.

Nâng cao một ngoại lệ

Cố gắng nâng cao một ngoại lệ trong một chiếc Python Lambda sẽ khiến bạn suy nghĩ hai lần. Có một số cách thông minh để làm như vậy, nhưng ngay cả một cái gì đó như sau là tốt hơn để tránh:

>>>

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

Bởi vì một tuyên bố không chính xác về mặt cú pháp trong cơ thể Python Lambda, cách giải quyết trong ví dụ trên bao gồm trừu tượng hóa cuộc gọi tuyên bố với chức năng chuyên dụng

>>> (lambda x: x + 1)(2)
3
18. Sử dụng loại cách giải quyết này nên tránh. Nếu bạn gặp loại mã này, bạn nên xem xét việc tái cấu trúc mã để sử dụng chức năng thông thường.

Phong cách mật mã

Như trong bất kỳ ngôn ngữ lập trình nào, bạn sẽ tìm thấy mã Python có thể khó đọc vì phong cách được sử dụng. Các chức năng của Lambda, do sự đồng nhất của chúng, có thể có lợi cho việc viết mã khó đọc.

Ví dụ Lambda sau đây chứa một số lựa chọn kiểu xấu:

>>>

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

Bởi vì một tuyên bố không chính xác về mặt cú pháp trong cơ thể Python Lambda, cách giải quyết trong ví dụ trên bao gồm trừu tượng hóa cuộc gọi tuyên bố với chức năng chuyên dụng

>>> (lambda x: x + 1)(2)
3
18. Sử dụng loại cách giải quyết này nên tránh. Nếu bạn gặp loại mã này, bạn nên xem xét việc tái cấu trúc mã để sử dụng chức năng thông thường.

>>>

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

Bởi vì một tuyên bố không chính xác về mặt cú pháp trong cơ thể Python Lambda, cách giải quyết trong ví dụ trên bao gồm trừu tượng hóa cuộc gọi tuyên bố với chức năng chuyên dụng

>>> (lambda x: x + 1)(2)
3
18. Sử dụng loại cách giải quyết này nên tránh. Nếu bạn gặp loại mã này, bạn nên xem xét việc tái cấu trúc mã để sử dụng chức năng thông thường.

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
0

Bởi vì một tuyên bố không chính xác về mặt cú pháp trong cơ thể Python Lambda, cách giải quyết trong ví dụ trên bao gồm trừu tượng hóa cuộc gọi tuyên bố với chức năng chuyên dụng

>>> (lambda x: x + 1)(2)
3
18. Sử dụng loại cách giải quyết này nên tránh. Nếu bạn gặp loại mã này, bạn nên xem xét việc tái cấu trúc mã để sử dụng chức năng thông thường.

Phong cách mật mã

Như trong bất kỳ ngôn ngữ lập trình nào, bạn sẽ tìm thấy mã Python có thể khó đọc vì phong cách được sử dụng. Các chức năng của Lambda, do sự đồng nhất của chúng, có thể có lợi cho việc viết mã khó đọc.

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
1

Ví dụ Lambda sau đây chứa một số lựa chọn kiểu xấu:

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
2

Undercore (

>>> (lambda x, y: x + y)(2, 3)
5
1) đề cập đến một biến mà bạn không cần phải đề cập rõ ràng. Nhưng trong ví dụ này, ba
>>> (lambda x, y: x + y)(2, 3)
5
1 đề cập đến các biến khác nhau. Một bản nâng cấp ban đầu cho mã Lambda này có thể là đặt tên cho các biến:

Phải thừa nhận rằng, nó vẫn khó đọc. Bằng cách vẫn tận dụng lợi thế của

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, một chức năng thông thường sẽ đi một chặng đường dài để hiển thị mã này dễ đọc hơn, lan truyền logic qua một vài dòng và các cuộc gọi chức năng:

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
3

Điều này vẫn không tối ưu nhưng cho bạn thấy một đường dẫn khả thi để tạo mã và các chức năng Python Lambda nói riêng, dễ đọc hơn. Trong các lựa chọn thay thế cho Lambdas, bạn sẽ học cách thay thế

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 và
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 bằng cách hiểu danh sách hoặc biểu thức máy phát. Điều này sẽ cải thiện đáng kể khả năng đọc của mã.

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
4

Lớp Python

Việc sử dụng phù hợp của các biểu thức Lambda

Lambdas trong Python có xu hướng là chủ đề của những tranh cãi. Một số lập luận chống lại Lambdas trong Python là:

  • Các vấn đề với khả năng đọc
  • Việc áp đặt một cách suy nghĩ chức năng
  • Cú pháp nặng với từ khóa
    >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
    >>> full_name('guido', 'van rossum')
    'Full name: Guido Van Rossum'
    
    5

Mặc dù các cuộc tranh luận sôi nổi đặt câu hỏi về sự tồn tại đơn thuần của tính năng này trong Python, các chức năng của Lambda có các thuộc tính đôi khi cung cấp giá trị cho ngôn ngữ Python và cho các nhà phát triển.

Các ví dụ sau đây minh họa các kịch bản trong đó việc sử dụng các hàm Lambda không chỉ phù hợp mà còn được khuyến khích trong mã Python.

Cấu trúc chức năng cổ điển

Các hàm Lambda thường xuyên được sử dụng với các hàm tích hợp

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 và
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
3, cũng như
>>> (lambda x, y: x + y)(2, 3)
5
9, được phơi bày trong mô-đun
>>> (lambda x: x + 1)(2)
3
41. Ba ví dụ sau đây là minh họa tương ứng về việc sử dụng các chức năng đó với các biểu thức Lambda làm bạn đồng hành:

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
5

Bạn có thể phải đọc mã giống với các ví dụ ở trên, mặc dù có dữ liệu có liên quan hơn. Vì lý do đó, điều quan trọng là phải nhận ra các cấu trúc đó. Tuy nhiên, những cấu trúc đó có các lựa chọn thay thế tương đương được coi là Pythonic hơn. Trong các lựa chọn thay thế cho Lambdas, bạn sẽ học cách chuyển đổi các chức năng bậc cao và Lambdas đi kèm của chúng thành các hình thức thành ngữ khác.

Chức năng chính

Các hàm chính trong Python là các hàm bậc cao hơn lấy tham số

>>> (lambda x: x + 1)(2)
3
42 làm đối số được đặt tên.
>>> (lambda x: x + 1)(2)
3
42 nhận được một hàm có thể là
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5. Hàm này ảnh hưởng trực tiếp đến thuật toán được điều khiển bởi chính hàm chính. Dưới đây là một số chức năng chính:

  • >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    0: Phương pháp liệt kê
    list method
  • >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    1,
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    2,
    >>> high_ord_func = lambda x, func: x + func(x)
    >>> high_ord_func(2, lambda x: x * x)
    6
    >>> high_ord_func(2, lambda x: x + 3)
    7
    
    3: Các chức năng tích hợp
    built-in functions
  • >>> (lambda x: x + 1)(2)
    3
    
    49 và
    >>> (lambda x: x + 1)(2)
    3
    
    50: Trong mô -đun thuật toán hàng đợi heap
    >>> (lambda x: x + 1)(2)
    3
    
    51
    in the Heap queue algorithm module
    >>> (lambda x: x + 1)(2)
    3
    
    51

Hãy tưởng tượng rằng bạn muốn sắp xếp một danh sách các ID được thể hiện dưới dạng chuỗi. Mỗi ID là sự kết hợp của chuỗi

>>> (lambda x: x + 1)(2)
3
52 và một số. Theo mặc định, sắp xếp danh sách này với hàm tích hợp
>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
1, sử dụng thứ tự từ vựng vì các yếu tố trong danh sách là chuỗi.

Để ảnh hưởng đến việc thực thi sắp xếp, bạn có thể gán Lambda cho đối số được đặt tên

>>> (lambda x: x + 1)(2)
3
42, sao cho việc sắp xếp sẽ sử dụng số được liên kết với ID:

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
6

Bạn có thể phải đọc mã giống với các ví dụ ở trên, mặc dù có dữ liệu có liên quan hơn. Vì lý do đó, điều quan trọng là phải nhận ra các cấu trúc đó. Tuy nhiên, những cấu trúc đó có các lựa chọn thay thế tương đương được coi là Pythonic hơn. Trong các lựa chọn thay thế cho Lambdas, bạn sẽ học cách chuyển đổi các chức năng bậc cao và Lambdas đi kèm của chúng thành các hình thức thành ngữ khác.

Chức năng chính

Các hàm chính trong Python là các hàm bậc cao hơn lấy tham số

>>> (lambda x: x + 1)(2)
3
42 làm đối số được đặt tên.
>>> (lambda x: x + 1)(2)
3
42 nhận được một hàm có thể là
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5. Hàm này ảnh hưởng trực tiếp đến thuật toán được điều khiển bởi chính hàm chính. Dưới đây là một số chức năng chính:

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
7

>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
0: Phương pháp liệt kê

Hướng dẫn can lambda be a variable name in python? - lambda có thể là một tên biến trong python không?

>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
1,
>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
2,
>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7
3: Các chức năng tích hợp

>>> (lambda x: x + 1)(2)
3
49 và
>>> (lambda x: x + 1)(2)
3
50: Trong mô -đun thuật toán hàng đợi heap
>>> (lambda x: x + 1)(2)
3
51

Hãy tưởng tượng rằng bạn muốn sắp xếp một danh sách các ID được thể hiện dưới dạng chuỗi. Mỗi ID là sự kết hợp của chuỗi >>> (lambda x: x + 1)(2) 3 52 và một số. Theo mặc định, sắp xếp danh sách này với hàm tích hợp >>> high_ord_func = lambda x, func: x + func(x) >>> high_ord_func(2, lambda x: x * x) 6 >>> high_ord_func(2, lambda x: x + 3) 7 1, sử dụng thứ tự từ vựng vì các yếu tố trong danh sách là chuỗi.

Để ảnh hưởng đến việc thực thi sắp xếp, bạn có thể gán Lambda cho đối số được đặt tên

>>> (lambda x: x + 1)(2)
3
42, sao cho việc sắp xếp sẽ sử dụng số được liên kết với ID:

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

Khung UI

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
8

Bạn có thể phải đọc mã giống với các ví dụ ở trên, mặc dù có dữ liệu có liên quan hơn. Vì lý do đó, điều quan trọng là phải nhận ra các cấu trúc đó. Tuy nhiên, những cấu trúc đó có các lựa chọn thay thế tương đương được coi là Pythonic hơn. Trong các lựa chọn thay thế cho Lambdas, bạn sẽ học cách chuyển đổi các chức năng bậc cao và Lambdas đi kèm của chúng thành các hình thức thành ngữ khác.

Chức năng chính

>>>

>>> add_one = lambda x: x + 1
>>> add_one(2)
3
9

Bạn có thể phải đọc mã giống với các ví dụ ở trên, mặc dù có dữ liệu có liên quan hơn. Vì lý do đó, điều quan trọng là phải nhận ra các cấu trúc đó. Tuy nhiên, những cấu trúc đó có các lựa chọn thay thế tương đương được coi là Pythonic hơn. Trong các lựa chọn thay thế cho Lambdas, bạn sẽ học cách chuyển đổi các chức năng bậc cao và Lambdas đi kèm của chúng thành các hình thức thành ngữ khác.

Chức năng chính

Các hàm chính trong Python là các hàm bậc cao hơn lấy tham số

>>> (lambda x: x + 1)(2)
3
42 làm đối số được đặt tên.
>>> (lambda x: x + 1)(2)
3
42 nhận được một hàm có thể là
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5. Hàm này ảnh hưởng trực tiếp đến thuật toán được điều khiển bởi chính hàm chính. Dưới đây là một số chức năng chính:

Hãy nói rằng bạn muốn kiểm tra một chức năng, trong thời gian chạy, xử lý các giá trị ngẫu nhiên. Nhưng, trong quá trình thực hiện thử nghiệm, bạn cần khẳng định chống lại các giá trị có thể dự đoán theo cách lặp lại. Ví dụ sau đây cho thấy làm thế nào, với chức năng

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, việc vá khỉ có thể giúp bạn:

def add_one(x):
    return x + 1
0

Trình quản lý bối cảnh giúp cách nhiệt hoạt động của khỉ vá một hàm từ thư viện tiêu chuẩn (

>>> (lambda x: x + 1)(2)
3
68, trong ví dụ này). Hàm Lambda được gán cho
>>> (lambda x: x + 1)(2)
3
69 thay thế hành vi mặc định bằng cách trả về giá trị tĩnh.

Điều này cho phép kiểm tra bất kỳ chức năng nào tùy thuộc vào

>>> (lambda x: x + 1)(2)
3
70 theo kiểu có thể dự đoán được. Trước khi rời khỏi Trình quản lý bối cảnh, hành vi mặc định của
>>> (lambda x: x + 1)(2)
3
70 được thiết lập lại để loại bỏ bất kỳ tác dụng phụ bất ngờ nào có ảnh hưởng đến các lĩnh vực khác của thử nghiệm có thể phụ thuộc vào hành vi mặc định của
>>> (lambda x: x + 1)(2)
3
70.

Các khung kiểm tra đơn vị như

>>> def identity(x):
...     return x
92 và
>>> (lambda x: x + 1)(2)
3
74 Đưa khái niệm này đến mức độ tinh vi cao hơn.

Với

>>> (lambda x: x + 1)(2)
3
74, vẫn sử dụng hàm
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, cùng một ví dụ trở nên thanh lịch và súc tích hơn:

def add_one(x):
    return x + 1
1

Với trận đấu pytest

>>> (lambda x: x + 1)(2)
3
77,
>>> (lambda x: x + 1)(2)
3
69 được ghi đè bằng một lambda sẽ trả về giá trị xác định,
>>> (lambda x: x + 1)(2)
3
79, cho phép xác thực thử nghiệm. Trật trình pytest
>>> (lambda x: x + 1)(2)
3
77 cho phép bạn kiểm soát phạm vi ghi đè. Trong ví dụ trên, việc gọi
>>> (lambda x: x + 1)(2)
3
69 trong các thử nghiệm tiếp theo, mà không sử dụng việc vá khỉ, sẽ thực hiện việc thực hiện bình thường của chức năng này.

Thực hiện kiểm tra

>>> (lambda x: x + 1)(2)
3
74 cho kết quả sau:

def add_one(x):
    return x + 1
2

Bài kiểm tra vượt qua khi chúng tôi xác nhận rằng

>>> (lambda x: x + 1)(2)
3
83 đã được thực hiện và kết quả là những kết quả được mong đợi trong bối cảnh thử nghiệm.

Giải pháp thay thế cho Lambdas

Mặc dù có những lý do tuyệt vời để sử dụng

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, nhưng có những trường hợp sử dụng nó được cau mày. Vậy các lựa chọn thay thế là gì?

Các chức năng bậc cao như

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2,
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
3 và
>>> (lambda x, y: x + y)(2, 3)
5
9 có thể được chuyển đổi thành các hình thức thanh lịch hơn với sự xoắn ốc nhẹ của sự sáng tạo, đặc biệt là với sự hiểu biết danh sách hoặc biểu thức máy phát.

Để tìm hiểu thêm về toàn bộ danh sách, hãy xem khi nào nên sử dụng danh sách hiểu trong Python. Để tìm hiểu thêm về các biểu thức máy phát, hãy xem cách sử dụng trình tạo và mang lại trong Python.

Bản đồ

Hàm tích hợp

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 có chức năng như một đối số đầu tiên và áp dụng nó cho từng phần tử của đối số thứ hai, một điều không thể sử dụng được. Ví dụ về các vòng lặp là chuỗi, danh sách và bộ dữ liệu. Để biết thêm thông tin về Iterables và iterators, hãy xem Iterables và Iterators.iterable. Examples of iterables are strings, lists, and tuples. For more information on iterables and iterators, check out Iterables and Iterators.

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 trả về một trình lặp tương ứng với bộ sưu tập được chuyển đổi. Ví dụ, nếu bạn muốn chuyển đổi danh sách các chuỗi thành một danh sách mới với mỗi chuỗi được viết hoa, bạn có thể sử dụng
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2, như sau:

>>>

def add_one(x):
    return x + 1
3

Bạn cần gọi

>>> (lambda x: x + 1)(2)
3
91 để chuyển đổi trình lặp được trả về bởi
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

Sử dụng danh sách hiểu loại bỏ sự cần thiết phải xác định và gọi chức năng Lambda:

>>>

def add_one(x):
    return x + 1
4

Bạn cần gọi >>> (lambda x: x + 1)(2) 3 91 để chuyển đổi trình lặp được trả về bởi >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

Sử dụng danh sách hiểu loại bỏ sự cần thiết phải xác định và gọi chức năng Lambda:

>>>

def add_one(x):
    return x + 1
5

Bạn cần gọi

>>> (lambda x: x + 1)(2)
3
91 để chuyển đổi trình lặp được trả về bởi
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

Sử dụng danh sách hiểu loại bỏ sự cần thiết phải xác định và gọi chức năng Lambda:

>>>

def add_one(x):
    return x + 1
6

Bạn cần gọi >>> (lambda x: x + 1)(2) 3 91 để chuyển đổi trình lặp được trả về bởi >>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}' >>> full_name('guido', 'van rossum') 'Full name: Guido Van Rossum' 2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

Sử dụng danh sách hiểu loại bỏ sự cần thiết phải xác định và gọi chức năng Lambda:

Lọc

>>>

def add_one(x):
    return x + 1
7

Bạn cần gọi

>>> (lambda x: x + 1)(2)
3
91 để chuyển đổi trình lặp được trả về bởi
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

>>>

Bạn cần gọi
>>> (lambda x: x + 1)(2)
3
91 để chuyển đổi trình lặp được trả về bởi
>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
2 thành một danh sách mở rộng có thể được hiển thị trong trình thông dịch shell python.

Sử dụng danh sách hiểu loại bỏ sự cần thiết phải xác định và gọi chức năng Lambda:

>>>

def add_one(x):
    return x + 1
9

Việc sử dụng dấu gạch dưới (

>>> (lambda x, y: x + y)(2, 3)
5
1) là một quy ước Python chỉ ra rằng bạn có thể bỏ qua giá trị thứ hai của cặp.

(lambda x: x + 1)(2) = lambda 2: 2 + 1
                     = 2 + 1
                     = 3
02 có một đối số duy nhất, vì vậy biểu thức máy phát không cần phải ở trong ngoặc đơn.

Lambdas Pythonic có hay không?

PEP 8, là hướng dẫn kiểu cho mã Python, có nội dung:

Luôn sử dụng câu lệnh DEF thay vì câu lệnh gán liên kết biểu thức Lambda trực tiếp với định danh. (Nguồn)

Điều này không khuyến khích sử dụng Lambda ràng buộc với một định danh, chủ yếu là nơi các chức năng nên được sử dụng và có nhiều lợi ích hơn. PEP 8 không đề cập đến các cách sử dụng khác của

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5. Như bạn đã thấy trong các phần trước, các chức năng của Lambda chắc chắn có thể sử dụng tốt, mặc dù chúng bị hạn chế.

Một cách có thể để trả lời câu hỏi là các chức năng Lambda là hoàn toàn pythonic nếu không có gì có sẵn thêm pythonic. Tôi tránh xa việc xác định ý nghĩa của Pythonic, để lại cho bạn định nghĩa phù hợp nhất với suy nghĩ của bạn, cũng như phong cách mã hóa cá nhân hoặc nhóm của bạn.

Ngoài phạm vi hẹp của Python

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5, cách viết mã Python tuyệt đẹp với PEP 8 là một tài nguyên tuyệt vời mà bạn có thể muốn kiểm tra về phong cách mã trong Python.

Sự kết luận

Bây giờ bạn biết cách sử dụng các chức năng Python

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'
5 và có thể:

  • Viết Python Lambdas và sử dụng các chức năng ẩn danh
  • Chọn một cách khôn ngoan giữa các chức năng của Lambdas hoặc Python bình thường
  • Tránh sử dụng quá nhiều lambdas
  • Sử dụng lambdas với các chức năng bậc cao hoặc các chức năng khóa Python

Nếu bạn có một xu hướng cho toán học, bạn có thể có một số niềm vui khi khám phá thế giới hấp dẫn của tính toán Lambda.

Python lambdas giống như muối. Một nhúm trong thư rác, giăm bông và trứng của bạn sẽ tăng cường hương vị, nhưng quá nhiều sẽ làm hỏng món ăn.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Cách sử dụng các chức năng của Python Lambda This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: How to Use Python Lambda Functions

Lambda có phải là một tên biến trong Python không?

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. Đó là một chức năng nhỏ và bị hạn chế không có nhiều hơn một dòng. Giống như một hàm bình thường, hàm lambda có thể có nhiều đối số với một biểu thức.. It is a small and restricted function having no more than one line. Just like a normal function, a Lambda function can have multiple arguments with one expression.

Lambda có thể được gán cho một biến không?

Tạo hàm Lambda mà toán tử Lambda không thể có bất kỳ câu lệnh nào và nó trả về một đối tượng hàm mà chúng ta có thể gán cho bất kỳ biến nào.it returns a function object that we can assign to any variable.

Làm thế nào để bạn đặt tên cho một lambda trong Python?

Hàm Lambda, còn được gọi là 'Hàm ẩn danh' giống như hàm Python thông thường nhưng có thể được xác định mà không có tên.Mặc dù các hàm bình thường được xác định bằng cách sử dụng từ khóa DEF, các hàm ẩn danh được xác định bằng cách sử dụng từ khóa Lambda.Tuy nhiên, chúng bị giới hạn trong một dòng biểu thức duy nhất.can be defined without a name. While normal functions are defined using the def keyword, anonymous functions are defined using the lambda keyword. However,they are restricted to single line of expression.

Bạn có thể đặt tên cho một lambda?

Lưu ý rằng bạn không thể đặt tên cho các hàm Lambda, vì chúng là ẩn danh (không có tên) theo định nghĩa.Một hàm Lambda có thể có nhiều đối số như bạn cần sử dụng, nhưng cơ thể phải là một biểu thức duy nhất.you can't give a name to lambda functions, as they are anonymous (without a name) by definition. A lambda function can have as many arguments as you need to use, but the body must be one single expression.