Python chuyển biến từ chức năng này sang chức năng khác

Một trong những sự thật dựng tóc gáy mà chúng ta học được trong các khóa đào tạo cơ bản về Python của tôi là bạn có thể chuyển các hàm này sang các hàm khác. Bạn có thể chuyển các hàm xung quanh vì trong Python, các hàm là các đối tượng

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

Đây là phần 1 của loạt bài mà tôi mong đợi về các thuộc tính khác nhau của “đối tượng chức năng”. Bài viết này tập trung vào những điều mà một lập trình viên Python mới nên biết và đánh giá cao về bản chất đối tượng của các hàm Python

Chức năng có thể được tham khảo

Nếu bạn cố gắng sử dụng một hàm mà không đặt dấu ngoặc đơn sau hàm đó thì Python sẽ không phàn nàn nhưng nó cũng sẽ không làm được 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 (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 chiếu đến các đối tượng hàm này, giống như cách chúng ta có thể tham chiếu đến một chuỗi, một số hoặc một đố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 chiếu đến các hàm giống như bất kỳ đối tượng nào khác, nên chúng ta có thể trỏ một biến đến 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 trỏ đến 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ự như việc gọi >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 3 sẽ làm

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

Lưu ý rằng chúng tôi đã không tạo một chức năng mới. Chúng ta vừa chỉ tên biến 1 2 9 cho hàm >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 3

>>> 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ấu trúc dữ liệu và sau đó tham khảo chúng sau

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

Việc lấy một hàm và đặt cho nó một tên khác hoặc lưu trữ nó bên trong một cấu trúc dữ liệu không phổ biến lắm, nhưng Python cho phép chúng ta làm những việc này vì các hàm có thể được truyền xung quanh, giống như bất kỳ đối tượng nào khác

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

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

Ví dụ chúng ta có thể định nghĩa một hàm

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

Và sau đó chuyển nó vào hàm >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 6 tích hợp để xem nó làm gì

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

Và chúng ta có thể truyền hàm vào chính nó (vâng, điều này thật lạ), nó sẽ chuyển đổi nó thành một chuỗi ở đây

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

Thực tế, có khá nhiều hàm được tích hợp sẵn trong Python có nghĩa là chấp nhận các hàm khác làm đối số

Hàm >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 tích hợp chấp nhận hai điều làm đối số. một >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 8 và một >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 9

1 2 3 4 5 6 1 2 3 1

Có thể lặp lại đã cho (danh sách, bộ dữ liệu, chuỗi, v.v. ) được lặp lại và hàm đã cho được gọi trên từng mục trong lần lặp đó. bất cứ khi nào hàm trả về >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 40 (hoặc một giá trị trung thực khác) thì mục đó được đưa vào đầu ra >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7

Vì vậy, nếu chúng tôi vượt qua >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 một hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 43 (trả về >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 40 khi được cung cấp một số lẻ) và một danh sách các số, chúng tôi sẽ nhận lại tất cả các số mà chúng tôi đã cung cấp cho nó là số lẻ

1 2 3 2____23

Đối tượng được trả về từ >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 là một lazy iterator nên chúng tôi cần chuyển đổi nó thành một >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 46 để thực sự thấy đầu ra của nó

Vì các hàm có thể được truyền vào các hàm, điều đó cũng có nghĩa là các hàm có thể chấp nhận một hàm khác làm đối số. Hàm >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 giả sử đối số đầu tiên của nó là một hàm. Bạn có thể nghĩ về hàm >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 khá giống với hàm này

1 2 3 4 5 6 1 2 3 5

Hàm này mong đợi đối số >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 49 là một hàm (về mặt kỹ thuật, nó có thể là bất kỳ hàm nào có thể gọi được). Khi chúng tôi gọi hàm đó (với >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 50), chúng tôi chuyển một đối số cho nó và sau đó kiểm tra tính trung thực của giá trị trả về của nó

Các hàm Lambda là một ví dụ về điều này

Biểu thức lambda là một cú pháp đặc biệt trong Python để tạo một hàm ẩn danh. Khi bạn đánh giá một biểu thức lambda, đối tượng bạn nhận được được gọi là hàm lambda

1 2 3 4 5 1 2 3 7

Các hàm Lambda gần giống như các hàm Python thông thường, với một vài lưu ý

Không giống như các hàm khác, hàm lambda không có tên (tên của chúng hiển thị là >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 51). Chúng cũng không thể có chuỗi tài liệu và chúng chỉ có thể chứa một biểu thức Python duy nhất

1 2 3 4 5 6 1 2 3 9

Bạn có thể coi biểu thức lambda là lối tắt để tạo một hàm sẽ đánh giá một biểu thức Python đơn lẻ và trả về kết quả của biểu thức đó

Vì vậy, việc xác định biểu thức lambda không thực sự đánh giá biểu thức đó. nó trả về một hàm có thể đánh giá biểu thức đó sau

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

Tôi muốn lưu ý rằng cả ba ví dụ trên của >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 52 đều là những ví dụ kém. Nếu bạn muốn một tên biến trỏ đến một đối tượng hàm mà bạn có thể sử dụng sau này, bạn nên sử dụng >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 53 để định nghĩa một hàm. đó là cách thông thường để xác định một chức năng

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 dùng khi chúng ta muốn xác định một hàm và chuyển nó vào một hàm khác ngay lập tức

Ví dụ ở đây, chúng tôi đang sử dụng >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 để lấy số chẵn, nhưng chúng tôi đang sử dụng biểu thức lambda nên chúng tôi không phải xác định hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 55 trước khi sử dụ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 biểu thức lambda thích hợp nhất. truyền một chức năng vào một chức năng khác trong khi xác định tất cả chức năng đã truyền đó trên một dòng mã

Như tôi đã viết trong Sử dụng quá nhiều biểu thức lambda, tôi không phải là người hâm mộ cú pháp biểu thức lambda của Python. 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 một hàm

Bất cứ khi nào bạn nhìn thấy biểu thức >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 52, hãy ghi nhớ rằng

  1. Biểu thức lambda là một cú pháp đặc biệt để tạo một hàm và chuyển nó sang một hàm khác trên một dòng mã
  2. Các hàm lambda giống như tất cả các đối tượng hàm khác. không phải là đặc biệt hơn so với khác và cả hai có thể được thông qua xung quanh

Tất cả các hàm trong Python có thể được truyền dưới dạng đối số cho một hàm khác (điều đó chỉ xảy ra với mục đích duy nhất của các hàm lambda)

Một ví dụ phổ biến. 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 sẵn, bạn sẽ thấy một chức năng được truyền vào một chức năng khác ở đâu?

Đó là một quy ước chung cho các hàm chấp nhận một đối số có thể lặp lại để được sắp xếp/được sắp xếp cũng chấp nhận một đối số có tên gọi là >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58. Đối số >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58 này phải là một hàm hoặc một hàm khác có thể gọi được

Tất cả các hàm , , và đều tuân theo quy ước chấp nhận hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58 này

>>> 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

Điều đó được gọi cho mỗi giá trị trong lần lặp nhất định và giá trị trả về được sử dụng để sắp xếp/sắp xếp từng mục có thể lặp lại. Bạn có thể coi chức năng chính này giống như việc tính toán một khóa so sánh cho từng mục trong iterable

Trong ví dụ trên, khóa so sánh của chúng tôi trả về một chuỗi được viết thường, do đó, mỗi chuỗi được so sánh theo phiên bản viết thường của nó (dẫn đến thứ tự không phân biệt chữ hoa chữ thường)

Chúng tôi đã sử dụng hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 01 để làm điều 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

Ghi chú. Thủ thuật >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 02 đó hơi kỳ quặc nếu bạn không quen với cách hoạt động của các lớp học. 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 gõ >>> 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 điểm khác

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

1 2 1 2 3 4 5 6 1

Nếu có nhiều giá trị tối đa hoặc tối thiểu, thì giá trị sớm nhất sẽ thắng (đó là cách hoạt động của >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 06/>>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 07)

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

Đây là một hàm sẽ trả về một bộ gồm 2 mục chứa độ dài của một chuỗi đã cho và phiên bản chuẩn hóa chữ hoa chữ thường của chuỗi đó

1 2 3 1 2 3 4 5 6 5

Chúng ta có thể chuyển hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 08 này dưới dạng đối số >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58 cho >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 10 để sắp xếp các chuỗi của chúng ta theo độ dài trước rồi sau đó theo biểu diễn chuẩn hóa chữ hoa chữ thường của chúng

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

Điều này dựa trên thực tế là các toán tử thứ tự của Python thực hiện các phép so sánh sâu

Các ví dụ khác về việc truyền hàm dưới dạng đối số

Đối số >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58 được chấp nhận bởi >>> 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 chỉ là một ví dụ phổ biến về việc chuyển hàm vào hàm

Hai tích hợp Python chấp nhận chức năng khác là >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 15 và >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7

Chúng ta đã thấy rằng >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 sẽ lọc danh sách của chúng ta dựa trên giá trị trả về của một hàm nhất định

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

Hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 15 sẽ gọi hàm đã cho trên mỗi mục trong lần lặp đã cho và sử dụng kết quả của lệnh gọi hàm đó làm mục mới

1 2 >>> "hello" 'hello' >>> 2.5 2.5 >>> range(10) range(0, 10) 1

Ví dụ ở đây, chúng tôi đang chuyển đổi số thành chuỗi và bình phương số

>>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 0>>> "hello" 'hello' >>> 2.5 2.5 >>> range(10) range(0, 10) 3

Ghi chú. như tôi đã lưu ý trong bài viết của mình về việc lạm dụng lambda, cá nhân tôi thích

Tương tự như >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 15 và >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7, cũng có và từ mô-đun >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 23. Cái đầu tiên giống như >>> numbers = [2, 1, 3, 4, 7, 11, 18, 29] >>> gimme = numbers.pop 7 ngoại trừ nó dừng lại khi nó tìm thấy một giá trị mà hàm vị ngữ là sai. Cái thứ hai làm ngược lại. nó chỉ bao gồm các giá trị sau khi hàm vị ngữ trở thành sai

>>> "hello" 'hello' >>> 2.5 2.5 >>> range(10) range(0, 10) 4>>> "hello" 'hello' >>> 2.5 2.5 >>> range(10) range(0, 10) 5

Và có và , cả hai đều gọi hàm 2 đối số để tích lũy các giá trị khi chúng lặp lại

>>> numbers = [1, 2, 3] >>> numbers.pop <built-in method pop of list object at 0x7ff246c76a80> 6>>> "hello" 'hello' >>> 2.5 2.5 >>> range(10) range(0, 10) 7

Lớp trong mô-đun >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 25 là một ví dụ khác. Lớp >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 26 tạo các đối tượng giống như từ điển sẽ không bao giờ tăng giá trị >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 27 khi truy cập khóa bị thiếu mà thay vào đó sẽ tự động thêm một giá trị mới vào từ điển

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 hàm có thể gọi được (hàm 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

Đoạn 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 mà không có đối số

1 2 1 2 1

Ở đây, giá trị mặc định là >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 46, trả về một danh sách mới khi được gọi mà không có đối số

1 2 3 4 5 1 2 3

Hàm 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 )

Đây là một ví dụ về >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 33 được sử dụng để “liên kết” đố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 41 2 5

Hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 37 được trả về bây giờ thực hiện điều tương tự như khi >>> 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

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

Bạn cũng sẽ tìm thấy các hàm chấp nhận hàm trong các thư viện của bên thứ ba, như và trong numpy. Bất cứ khi nào bạn nhìn thấy một lớp hoặc một hàm có tài liệu nói rằng một trong các đối số của nó phải là một đối tượng có thể gọi được hoặc có thể gọi được, điều đó có nghĩa là “bạn có thể chuyển một hàm vào đây”

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

Python cũng hỗ trợ các hàm lồng nhau (các hàm được xác định bên trong các hàm khác). Các hàm lồng nhau cung cấp năng lượng cho cú pháp của Python

Tôi sẽ không thảo luận về các hàm lồng nhau trong bài viết này vì các hàm lồng nhau đảm bảo việc khám phá các biến không cục bộ, bao đóng và các góc kỳ lạ khác của Python mà bạn không cần biết khi lần đầu tiên bắt đầu coi các hàm là

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

Xử lý các chức năng như các đối tượng là bình thường

Python có các hàm hạng nhất, có nghĩa là

  1. Bạn có thể gán chức năng 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ấ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 hàm trả về các hàm

Có vẻ lạ khi coi các hàm là đối tượng, nhưng điều đó không có gì lạ trong Python. Theo tính toán của tôi, khoảng 15% Python tích hợp có nghĩa là chấp nhận các hàm làm đố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, >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 48, >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 49)

Công dụng quan trọng nhất của các hàm hạng nhất của Python là

  1. Truyền hàm >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 58 cho các hàm >>> 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. Truyền các chức năng vào các trình 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. Truyền "hàm tạo giá trị mặc định" cho các lớp như >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 26
  4. Chức năng “Đánh giá một phần” bằng cách chuyển chúng vào >>> def greet(): .. print("Hello world!") ... >>> greet <function greet at 0x7ff246c6d9d0> 57

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 đang viết các hàm trang trí, có lẽ bạn không cần phải khám phá chủ đề này nữa

Làm cách nào để lấy giá trị biến từ hàm này sang hàm khác trong Python?

Biến có thể được gán cho đối tượng hàm bên trong thân hàm . Vì vậy, biến chỉ tồn tại sau khi hàm được gọi. Khi hàm đã được gọi, biến sẽ được liên kết với đối tượng hàm.

Làm cách nào để chuyển đầu ra của hàm này sang hàm khác trong Python?

Hiển thị hoạt động trên bài đăng này. .
RETURN đầu ra của chức năng A. def A(num1,num2). num3 = num1+num2 trả về num3
Khi bạn gọi hàm A, hãy lưu kết quả vào một biến khác. kết quả = A(12,14).
Khi gọi hàm B, thay cho num3, hãy chuyển giá trị được lưu trong 'kết quả'. Đối số thứ hai có thể là bất kỳ số nào

Làm cách nào để gửi dữ liệu từ chức năng này sang chức năng khác trong Python?

Bạn có thể trả về hai thứ cùng một lúc từ bất kỳ chức năng nào, nhưng bạn chỉ có thể sử dụng một câu lệnh trả về. bằng cách sử dụng return x, y, điều này trả về một bộ (x, y) mà bạn có thể sử dụng trong chức năng chính của mình

Tôi có thể sử dụng một biến từ hàm Python khác không?

Trong Python và hầu hết các ngôn ngữ lập trình, các biến được khai báo bên ngoài hàm được gọi là biến toàn cục. Bạn có thể truy cập các biến như vậy bên trong và bên ngoài một hàm, vì chúng có phạm vi toàn cục. Biến x trong đoạn mã trên được khai báo bên ngoài một hàm. x = 10

Chủ đề