Hướng dẫn lambda function as argument python - hàm lambda như đối số python

Một trong những sự thật nuôi tóc nhiều hơn mà chúng tôi học được trong các khóa đào tạo Python giới thiệu của tôi là bạn có thể chuyển các chức năng vào các chức năng khác. Bạn có thể vượt qua các chức năng xung quanh vì trong Python, các hàm là đối tượng.you can pass functions into other functions. You can pass functions around because in Python, functions are objects.

Bạn có thể không cần phải biết về điều này trong tuần đầu tiên sử dụng Python, nhưng khi bạn đi sâu hơn vào Python, bạn sẽ thấy rằng có thể rất thuận tiện để hiểu cách chuyển chức năng vào một chức năng khác.

Đây là phần 1 của những gì tôi mong đợi là một chuỗi về các thuộc tính khác nhau của các đối tượng chức năng của Cameron. Bài viết này tập trung vào những gì một lập trình viên Python mới nên biết và đánh giá cao về tính chất đối tượng của các chức năng Python.the object-nature of Python’s functions.

    Các chức năng có thể được tham chiếu

    Nếu bạn cố gắng sử dụng một chức năng mà không đặt dấu ngoặc đơn sau khi nó python giành được khiếu nại nhưng nó cũng đã giành được bất cứ điều gì hữu ích:

    1
    2
    3
    4
    5
    
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    

    Điều này cũng áp dụng cho các phương thức (các phương thức là các hàm sống trên các đối tượng):

    1
    2
    3
    
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    

    Python đang cho phép chúng ta tham khảo các đối tượng chức năng này, giống như cách chúng ta có thể đề cập đến một chuỗi, một số hoặc đối tượng

    1
    2
    
    8:

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    

    Vì chúng ta có thể tham khảo các chức năng như bất kỳ đối tượng nào khác, chúng ta có thể trỏ một biến vào một hàm:

    1
    2
    
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    

    Biến

    1
    2
    
    9 đó hiện chỉ vào phương thức
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    0 trong danh sách
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    1 của chúng tôi. Vì vậy, nếu chúng ta gọi
    1
    2
    
    9, nó sẽ làm điều tương tự mà việc gọi
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 sẽ làm:

    ________số 8
    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    

    Lưu ý rằng chúng tôi đã làm một chức năng mới. Chúng tôi đã chỉ tên biến

    1
    2
    
    9 vào hàm
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3:didn’t make a new function. We’ve just pointed the
    1
    2
    
    9 variable name to the
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 function:

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    0
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    1

    Bạn thậm chí có thể lưu trữ các chức năng bên trong các cấu trúc dữ liệu và sau đó tham chiếu chúng sau:

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    2
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    3

    Nó không phổ biến lắm để lấy một chức năng và đặt cho nó một tên khác hoặc lưu trữ nó bên trong cấu trúc dữ liệu, nhưng Python cho phép chúng tôi làm những việc này vì các chức năng có thể được truyền xung quanh, giống như bất kỳ đối tượng nào khác.functions can be passed around, just like any other object.

    Các chức năng có thể được chuyển vào các chức năng khác

    Các chức năng, giống như bất kỳ đối tượng nào khác, có thể được truyền như một đối số cho một hàm khác.

    Ví dụ: chúng ta có thể xác định một hàm:

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    

    Vì chúng ta có thể tham khảo các chức năng như bất kỳ đối tượng nào khác, chúng ta có thể trỏ một biến vào một hàm:

    1
    2
    3
    4
    5
    
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    

    Điều này cũng áp dụng cho các phương thức (các phương thức là các hàm sống trên các đối tượng):

    1
    2
    
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    

    Biến

    1
    2
    
    9 đó hiện chỉ vào phương thức
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    0 trong danh sách
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    1 của chúng tôi. Vì vậy, nếu chúng ta gọi
    1
    2
    
    9, nó sẽ làm điều tương tự mà việc gọi
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 sẽ làm:

    ________số 8

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    

    Vì chúng ta có thể tham khảo các chức năng như bất kỳ đối tượng nào khác, chúng ta có thể trỏ một biến vào một hàm:

    1
    2
    

    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    Biến
    1
    2
    
    9 đó hiện chỉ vào phương thức
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    0 trong danh sách
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    1 của chúng tôi. Vì vậy, nếu chúng ta gọi
    1
    2
    
    9, nó sẽ làm điều tương tự mà việc gọi
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 sẽ làm:

    ________số 8

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    

    Vì chúng ta có thể tham khảo các chức năng như bất kỳ đối tượng nào khác, chúng ta có thể trỏ một biến vào một hàm:

    1
    2
    

    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    lambda expression the object you get back is called a lambda function.

    1
    2
    3
    4
    5
    
    Biến
    1
    2
    
    9 đó hiện chỉ vào phương thức
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    0 trong danh sách
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    1 của chúng tôi. Vì vậy, nếu chúng ta gọi
    1
    2
    
    9, nó sẽ làm điều tương tự mà việc gọi
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 sẽ làm:

    ________số 8

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    

    Vì chúng ta có thể tham khảo các chức năng như bất kỳ đối tượng nào khác, chúng ta có thể trỏ một biến vào một hàm:

    1
    2
    

    1
    2
    3
    4
    5
    
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    

    Biến

    1
    2
    
    9 đó hiện chỉ vào phương thức
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    0 trong danh sách
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    1 của chúng tôi. Vì vậy, nếu chúng ta gọi
    1
    2
    
    9, nó sẽ làm điều tương tự mà việc gọi
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    3 sẽ làm:

    1
    2
    3
    4
    5
    6
    
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    3

    Các biểu thức Lambda là khi chúng tôi muốn xác định một hàm và chuyển nó vào một chức năng khác ngay lập tức.pass it into another function immediately.

    Ví dụ, ở đây, chúng tôi sử dụng

    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    7 để có được số chẵn, nhưng chúng tôi sử dụng biểu thức Lambda để chúng tôi không phải xác định hàm
    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    5 trước khi chúng tôi sử dụng nó:

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    0
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    5

    Đây là cách sử dụng các biểu thức Lambda thích hợp nhất: chuyển một hàm vào một hàm khác trong khi xác định chức năng được truyền tất cả trên một dòng mã.

    Như tôi đã viết về việc lạm dụng các biểu thức Lambda, tôi đã không phải là một fan hâm mộ của cú pháp biểu hiện Python Lamb Lambda. Cho dù bạn có thích cú pháp này hay không, bạn nên biết rằng cú pháp này chỉ là một lối tắt để tạo hàm.

    Bất cứ khi nào bạn nhìn thấy các biểu thức

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    2, hãy nhớ rằng:

    1. Biểu thức Lambda là một cú pháp đặc biệt để tạo hàm và chuyển nó cho một hàm khác trên một dòng mã
    2. Các hàm Lambda cũng giống như tất cả các đối tượng chức năng khác: không đặc biệt hơn đối tượng khác và cả hai đều có thể được truyền xung quanh

    Tất cả các chức năng trong Python có thể được truyền như một đối số cho một hàm khác (đó chỉ là mục đích duy nhất của các hàm Lambda).

    Một ví dụ phổ biến: các chức năng chính

    Bên cạnh chức năng

    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    7 tích hợp, bạn sẽ thấy một hàm được truyền vào một chức năng khác ở đâu? Có lẽ nơi phổ biến nhất mà bạn sẽ thấy điều này trong chính Python là với một chức năng chính.key function.

    Nó có một quy ước phổ biến cho các chức năng chấp nhận một sự phân biệt/được sắp xếp/ra lệnh cũng chấp nhận một đối số được đặt tên gọi là

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    8. Đối số
    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    8 này phải là một hàm hoặc một người khác có thể gọi được.

    Các hàm được sắp xếp, tối thiểu và tối đa đều tuân theo quy ước chấp nhận hàm

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    8:

    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    6
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    7

    Hàm khóa đó được gọi cho mỗi giá trị trong số đó đã cho và giá trị trả về được sử dụng để đặt hàng/sắp xếp từng mục có thể lặp lại. Bạn có thể nghĩ về chức năng khóa này như tính toán một khóa so sánh cho từng mục trong ITEBELLE.a comparison key for each item in the iterable.

    Trong ví dụ trên, khóa so sánh của chúng tôi trả về một chuỗi thấp hơn, do đó, mỗi chuỗi được so sánh bởi phiên bản thấp hơn của nó (dẫn đến thứ tự không nhạy cảm trường hợp).

    Chúng tôi đã sử dụng chức năng

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    01 để thực hiện việc này, nhưng điều tương tự có thể được thực hiện bằng cách sử dụng
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    02:

    1
    2
    3
    
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    9

    Lưu ý: Thủ thuật

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    02 đó hơi kỳ lạ nếu bạn không quen thuộc với cách các lớp hoạt động. Các lớp lưu trữ các phương thức không liên kết sẽ chấp nhận một thể hiện của lớp đó khi được gọi. Chúng tôi thường nhập
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    04 nhưng
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    05 là những gì Python dịch nó thành. Đó là một câu chuyện cho một thời gian khác.
    : That
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    02 trick is a bit odd if you aren’t familiar with how classes work. Classes store the unbound methods that will accept an instance of that class when called. We normally type
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    04 but
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    05 is what Python translates that to. That’s a story for another time.

    Ở đây, chúng tôi tìm thấy chuỗi với nhiều chữ cái nhất trong đó:

    1
    2
    
    1
    2
    3
    4
    5
    6
    
    1

    Nếu có nhiều tối đa hoặc tối thiểu, thì lần đầu tiên sẽ thắng (đó là cách mà ____ 106/________ 107 hoạt động):

    1
    2
    3
    4
    5
    
    1
    2
    3
    4
    5
    6
    
    3

    Ở đây, một hàm sẽ trả về một bộ 2 mục chứa độ dài của một chuỗi đã cho và phiên bản bình thường hóa của chuỗi đó:

    1
    2
    3
    
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    9

    Lưu ý: Thủ thuật

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    02 đó hơi kỳ lạ nếu bạn không quen thuộc với cách các lớp hoạt động. Các lớp lưu trữ các phương thức không liên kết sẽ chấp nhận một thể hiện của lớp đó khi được gọi. Chúng tôi thường nhập
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    04 nhưng
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    05 là những gì Python dịch nó thành. Đó là một câu chuyện cho một thời gian khác.

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    0
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    5

    Đây là cách sử dụng các biểu thức Lambda thích hợp nhất: chuyển một hàm vào một hàm khác trong khi xác định chức năng được truyền tất cả trên một dòng mã.

    Như tôi đã viết về việc lạm dụng các biểu thức Lambda, tôi đã không phải là một fan hâm mộ của cú pháp biểu hiện Python Lamb Lambda. Cho dù bạn có thích cú pháp này hay không, bạn nên biết rằng cú pháp này chỉ là một lối tắt để tạo hàm.

    Bất cứ khi nào bạn nhìn thấy các biểu thức

    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    2, hãy nhớ rằng:

    Biểu thức Lambda là một cú pháp đặc biệt để tạo hàm và chuyển nó cho một hàm khác trên một dòng mã

    Các hàm Lambda cũng giống như tất cả các đối tượng chức năng khác: không đặc biệt hơn đối tượng khác và cả hai đều có thể được truyền xung quanh

    1
    2
    3
    4
    5
    6
    
    Tất cả các chức năng trong Python có thể được truyền như một đối số cho một hàm khác (đó chỉ là mục đích duy nhất của các hàm Lambda).

    Một ví dụ phổ biến: các chức năng chính

    1
    2
    
    1
    2
    3
    4
    5
    6
    
    1

    Nếu có nhiều tối đa hoặc tối thiểu, thì lần đầu tiên sẽ thắng (đó là cách mà ____ 106/________ 107 hoạt động):

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    0
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    5

    Đây là cách sử dụng các biểu thức Lambda thích hợp nhất: chuyển một hàm vào một hàm khác trong khi xác định chức năng được truyền tất cả trên một dòng mã.: as I noted in my article on overusing lambda, I personally prefer to use generator expressions instead of the

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    15 and
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    7 functions.

    Như tôi đã viết về việc lạm dụng các biểu thức Lambda, tôi đã không phải là một fan hâm mộ của cú pháp biểu hiện Python Lamb Lambda. Cho dù bạn có thích cú pháp này hay không, bạn nên biết rằng cú pháp này chỉ là một lối tắt để tạo hàm.

    Bất cứ khi nào bạn nhìn thấy các biểu thức
    >>> gimme()
    29
    >>> numbers
    [2, 1, 3, 4, 7, 11, 18]
    >>> gimme(0)
    2
    >>> numbers
    [1, 3, 4, 7, 11, 18]
    >>> gimme()
    18
    
    2, hãy nhớ rằng:
    Biểu thức Lambda là một cú pháp đặc biệt để tạo hàm và chuyển nó cho một hàm khác trên một dòng mã

    Các hàm Lambda cũng giống như tất cả các đối tượng chức năng khác: không đặc biệt hơn đối tượng khác và cả hai đều có thể được truyền xung quanh

    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    6
    >>> numbers = [1, 2, 3]
    >>> numbers.pop
    <built-in method pop of list object at 0x7ff246c76a80>
    
    7

    Hàm khóa đó được gọi cho mỗi giá trị trong số đó đã cho và giá trị trả về được sử dụng để đặt hàng/sắp xếp từng mục có thể lặp lại. Bạn có thể nghĩ về chức năng khóa này như tính toán một khóa so sánh cho từng mục trong ITEBELLE.

    1
    2
    3
    4
    5
    6
    
    >>> "hello"
    'hello'
    >>> 2.5
    2.5
    >>> range(10)
    range(0, 10)
    
    9

    Lớp

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    26 này chấp nhận một cuộc gọi (chức năng hoặc lớp) sẽ được gọi để tạo giá trị mặc định bất cứ khi nào một khóa bị thiếu được truy cập.

    Mã trên hoạt động vì

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    29 trả về
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    30 khi được gọi không có đối số:

    1
    2
    
    1
    2
    
    1

    Ở đây, giá trị mặc định là

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    6, trả về một danh sách mới khi được gọi không có đối số.

    1
    2
    3
    4
    5
    
    1
    2
    
    3

    Hàm một phần trong mô -đun

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    32 là một ví dụ khác.
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    33 chấp nhận một hàm và bất kỳ số lượng đối số nào và trả về một hàm mới (về mặt kỹ thuật, nó trả về một đối tượng có thể gọi được).

    Ở đây, một ví dụ về

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    33 được sử dụng để liên kết với đối số từ khóa
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    35 với hàm
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    36:

    1
    2
    
    4
    1
    2
    
    5

    Hàm

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    37 được trả về bây giờ làm điều tương tự như thể
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    36 được gọi với
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    39:

    ________số 8
    1
    2
    
    7

    Bạn cũng sẽ tìm thấy các chức năng-các chức năng chấp nhận trong các thư viện của bên thứ ba, như trong Django và trong Numpy. Bất cứ khi nào bạn thấy một lớp hoặc một chức năng với tài liệu nói rằng một trong những đối số của nó phải là một đối tượng có thể gọi được hoặc một đối tượng có thể gọi được, điều đó có nghĩa là bạn có thể chuyển trong một chức năng ở đây.callable or a callable object, that means “you could pass in a function here”.

    Một chủ đề tôi đã bỏ qua: các chức năng lồng nhau

    Python cũng hỗ trợ các chức năng lồng nhau (các chức năng được xác định bên trong các chức năng khác). Các chức năng lồng nhau Power Python từ trang trí cú pháp.

    Tôi sẽ không thảo luận về các chức năng lồng nhau trong bài viết này bởi vì các chức năng lồng nhau đảm bảo thăm dò các biến không cục bộ, đóng cửa và các góc kỳ lạ khác của Python mà bạn không cần biết khi nào bạn mới bắt đầu với các chức năng đối xử như các đối tượng.

    Tôi dự định viết một bài viết tiếp theo về chủ đề này và liên kết đến nó ở đây sau. Trong khi đó, nếu bạn quan tâm đến các chức năng lồng nhau trong Python, việc tìm kiếm các chức năng bậc cao hơn trong Python có thể hữu ích.

    Đối xử với các chức năng như đối tượng là bình thường

    Python có các chức năng hạng nhất, có nghĩa là:

    1. Bạn có thể gán các hàm cho các biến
    2. Bạn có thể lưu trữ các chức năng trong danh sách, từ điển hoặc các cấu trúc dữ liệu khác
    3. Bạn có thể chuyển các chức năng vào các chức năng khác
    4. Bạn có thể viết các chức năng trả về các chức năng

    Nó có vẻ kỳ lạ khi coi các chức năng là đối tượng, nhưng nó không phải là bất thường trong Python. Theo tính toán của tôi, khoảng 15% các bản dựng Python có nghĩa là chấp nhận các chức năng như các đối số (

    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    06,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    07,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    10,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    15,
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    7,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    45,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    46,
    >>> def greet():
    ...     print("Hello world!")
    ...
    >>> greet
    <function greet at 0x7ff246c6d9d0>
    
    47,
    >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
    >>> gimme = numbers.pop
    
    7, ____149).

    Việc sử dụng quan trọng nhất của các chức năng hạng nhất Python, là:

    1. Chuyển hàm
      >>> gimme()
      29
      >>> numbers
      [2, 1, 3, 4, 7, 11, 18]
      >>> gimme(0)
      2
      >>> numbers
      [1, 3, 4, 7, 11, 18]
      >>> gimme()
      18
      
      8 cho các chức năng
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      10,
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      06 và
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      07 tích hợp
    2. Chuyển các chức năng vào những người trợ giúp vòng lặp như
      >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29]
      >>> gimme = numbers.pop
      
      7 và
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      55
    3. Chuyển một chức năng nhà máy tạo giá trị mặc định của người Viking đến các lớp như
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      26
    4. “Các chức năng đánh giá một phần của các chức năng bằng cách chuyển chúng vào
      >>> def greet():
      ...     print("Hello world!")
      ...
      >>> greet
      <function greet at 0x7ff246c6d9d0>
      
      57

    Các chủ đề này đi sâu hơn nhiều so với những gì tôi đã thảo luận ở đây, nhưng cho đến khi bạn thấy mình viết các chức năng trang trí, có lẽ bạn không cần phải khám phá chủ đề này nữa.

    Đối số Lambda là gì?

    Một hàm Lambda đánh giá một biểu thức cho một đối số nhất định.Bạn cung cấp cho hàm một giá trị (đối số) và sau đó cung cấp hoạt động (biểu thức).Từ khóa Lambda phải đến trước.Một đại tràng đầy đủ (:) tách các đối số và biểu thức.Trong mã ví dụ bên dưới, x là đối số và x+x là biểu thức.evaluates an expression for a given argument. You give the function a value (argument) and then provide the operation (expression). The keyword lambda must come first. A full colon (:) separates the argument and the expression. In the example code below, x is the argument and x+x is the expression.

    Python Lambda có thể có đối số mặc định không?

    Mặc định trong biểu thức Python Lambda trong Python và trong các ngôn ngữ khác như C ++, chúng ta có thể chỉ định các đối số mặc định.In Python, and in other languages like C++, we can specify default arguments.

    Lambda có thể lấy hai đối số python không?

    Một hàm Lambda có thể lấy bất kỳ số lượng đối số nào, nhưng chỉ có thể có một biểu thức..

    Làm thế nào để bạn xác định hàm Lambda với hai đối số?

    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.Trong Python, các biểu thức lambda (hoặc các dạng lambda) được sử dụng để xây dựng các hàm ẩn danh.Để làm như vậy, bạn sẽ sử dụng từ khóa Lambda (giống như bạn sử dụng def để xác định các hàm bình thường).use the lambda keyword (just as you use def to define normal functions).