Cải thiện bài viết
Lưu bài viết
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận
- Các chức năng trong Python là các đối tượng hạng nhất. Các đối tượng hạng nhất trong một ngôn ngữ được xử lý đồng đều trong suốt. Chúng có thể được lưu trữ trong các cấu trúc dữ liệu, được truyền dưới dạng đối số hoặc được sử dụng trong các cấu trúc điều khiển.
- Thuộc tính của các chức năng hạng nhất:
- Một hàm là một thể hiện của loại đối tượng.
- Bạn có thể lưu trữ chức năng trong một biến.
- Bạn có thể chuyển chức năng như một tham số cho một hàm khác.
Bạn có thể trả về chức năng từ một hàm.
Bạn có thể lưu trữ chúng trong các cấu trúc dữ liệu như bảng băm, danh sách,
Python3
Ví dụ 1: Các chức năng không có đối số
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
4>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
5>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
6>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
7Trong ví dụ này, phương pháp đầu tiên là A [] và phương thức thứ hai là B []. Phương thức A [] Trả về phương thức B [] được giữ dưới dạng đối tượng có tên trả về_function và sẽ được sử dụng để gọi phương thức thứ hai.
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
2>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
9>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
4>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
55____63>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
7>>> return 42
File "", line 1
SyntaxError: 'return' outside function
1
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
6 >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
7>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Inside the method A. Inside the method B.
8>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
9 >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
0>>> return 42
File "", line 1
SyntaxError: 'return' outside function
Đầu ra:
Python3
Ví dụ 2: Các chức năng với các đối số
Trong ví dụ này, phương pháp đầu tiên là A [] và phương thức thứ hai là B []. Ở đây một phương thức [] được gọi là trả về phương thức B [] i.e; thực thi cả hai chức năng.
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> return 42
File "", line 1
SyntaxError: 'return' outside function
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
4>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
555777>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> def get_even[numbers]:
... even_nums = [num for num in numbers if not num % 2]
... return even_nums
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
4>>> def get_even[numbers]:
... return [num for num in numbers if not num % 2]
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
6>>> def get_even[numbers]:
... return [num for num in numbers if not num % 2]
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
7>>> def get_even[numbers]:
... return [num for num in numbers if not num % 2]
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
8>>> def get_even[numbers]:
... return [num for num in numbers if not num % 2]
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
9>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
7
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
6 >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
7>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Hello and Good Morning.
8>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
9 >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
0>>> return 42
File "", line 1
SyntaxError: 'return' outside function
Đầu ra:
Python3
Ví dụ 2: Các chức năng với các đối số
Trong ví dụ này, phương pháp đầu tiên là A [] và phương thức thứ hai là B []. Ở đây một phương thức [] được gọi là trả về phương thức B [] i.e; thực thi cả hai chức năng.
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> return 42
File "", line 1
SyntaxError: 'return' outside function
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
4>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
555777>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 >>> def get_even[numbers]:
... even_nums = [num for num in numbers if not num % 2]
... return even_nums
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
4>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
4Hello and Good Morning.31
>>> return 42
File "", line 1
SyntaxError: 'return' outside function
1
3>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
6 >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
7>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
21
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 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: Sử dụng câu lệnh Python Return một cách hiệu quả This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Using the Python return Statement Effectively
Câu lệnh Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 là một thành phần chính của các hàm và phương thức. Bạn có thể sử dụng câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 để làm cho các chức năng của bạn gửi các đối tượng Python trở lại mã người gọi. Các đối tượng này được gọi là giá trị trả về hàm. Bạn có thể sử dụng chúng để thực hiện tính toán thêm trong các chương trình của bạn.return value. You can use them to perform further computation in your programs.Sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 một cách hiệu quả là một kỹ năng cốt lõi nếu bạn muốn mã hóa các chức năng tùy chỉnh có pythonic và mạnh mẽ.Trong hướng dẫn này, bạn sẽ học:
- Cách sử dụng câu lệnh Python
6 trong các chức năng của bạnPython>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
6 statement in your functions>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
- Cách trả về đơn hoặc nhiều giá trị từ các chức năng của bạnsingle or multiple values from your functions
- Những thực hành tốt nhất cần quan sát khi sử dụng các tuyên bố
6best practices to observe when using>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
6 statements>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
Với kiến thức này, bạn sẽ có thể viết các chức năng dễ đọc hơn, có thể duy trì và súc tích hơn trong Python. Nếu bạn hoàn toàn mới đối với các chức năng Python, thì bạn có thể kiểm tra xác định chức năng Python của riêng bạn trước khi đi sâu vào hướng dẫn này.
Bắt đầu với các chức năng Python
Hầu hết các ngôn ngữ lập trình cho phép bạn gán tên cho một khối mã thực hiện tính toán cụ thể. Các khối mã được đặt tên này có thể được sử dụng lại nhanh chóng vì bạn có thể sử dụng tên của chúng để gọi chúng từ các địa điểm khác nhau trong mã của bạn.
Các lập trình viên gọi các chương trình con, quy trình, quy trình hoặc chức năng được đặt tên này có tên này tùy thuộc vào ngôn ngữ họ sử dụng. Trong một số ngôn ngữ, có một sự khác biệt rõ ràng giữa một thói quen hoặc quy trình và một hàm.subroutines, routines, procedures, or functions depending on the language they use. In some languages, there’s a clear difference between a routine or procedure and a function.
Đôi khi sự khác biệt đó mạnh đến mức bạn cần sử dụng một từ khóa cụ thể để xác định quy trình hoặc chương trình con và từ khóa khác để xác định hàm. Ví dụ, ngôn ngữ lập trình cơ bản trực quan sử dụng
Hello and Good Morning.38 và
Hello and Good Morning.39 để phân biệt giữa hai.
Nói chung, một thủ tục là một khối mã được đặt tên thực hiện một tập hợp các hành động mà không tính toán giá trị hoặc kết quả cuối cùng. Mặt khác, một hàm là một khối mã được đặt tên thực hiện một số hành động với mục đích tính toán một giá trị hoặc kết quả cuối cùng, sau đó được gửi lại cho mã người gọi. Cả quy trình và chức năng có thể hành động dựa trên một tập hợp các giá trị đầu vào, thường được gọi là đối số.procedure is a named code block that performs a set of actions without computing a final value or result. On the other hand, a function is a named code block that performs some actions with the purpose of computing a final value or result, which is then sent back to the caller code. Both procedures and functions can act upon a set of input values, commonly known as arguments.
Trong Python, các loại khối mã được đặt tên này được gọi là chức năng vì chúng luôn gửi lại giá trị cho người gọi. Tài liệu Python xác định một chức năng như sau:
Một loạt các câu lệnh trả về một số giá trị cho người gọi. Nó cũng có thể được thông qua không hoặc nhiều đối số có thể được sử dụng trong việc thực hiện cơ thể. [Nguồn]
Mặc dù tài liệu chính thức nói rằng một hàm, trả về một số giá trị cho người gọi, nhưng bạn sẽ sớm thấy rằng các chức năng có thể trả về bất kỳ đối tượng Python nào cho mã người gọi.
Nói chung, một hàm có các đối số [nếu có], thực hiện một số hoạt động và trả về một giá trị [hoặc đối tượng]. Giá trị mà một hàm trả về người gọi thường được gọi là giá trị trả về hàm. Tất cả các hàm Python có giá trị trả về, rõ ràng hoặc ẩn. Bạn sẽ bao gồm sự khác biệt giữa các giá trị trả về rõ ràng và ẩn sau này trong hướng dẫn này.takes arguments [if any], performs some operations, and returns a value [or object]. The value that a function returns to the caller is generally known as the function’s return value. All Python functions have a return value, either explicit or implicit. You’ll cover the difference between explicit and implicit return values later in this tutorial.
Để viết hàm Python, bạn cần một tiêu đề bắt đầu bằng từ khóa
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1, theo sau là tên của hàm, một danh sách tùy chọn các đối số được phân tách bằng dấu phẩy bên trong một cặp dấu ngoặc đơn và dấu hai chấm cuối cùng.header that starts
with the >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1 keyword, followed by the name of the function, an optional list of comma-separated arguments inside a required pair of parentheses, and a final colon.Thành phần thứ hai của một hàm là khối mã hoặc cơ thể của nó. Python xác định các khối mã bằng cách sử dụng thụt lề thay vì dấu ngoặc,
Hello and Good Morning.41 và
Hello and Good Morning.42 từ khóa, v.v. Vì vậy, để xác định một hàm trong Python, bạn có thể sử dụng cú pháp sau:code block, or body. Python defines code blocks using indentation instead of brackets,
Hello and Good Morning.41 and
Hello and Good Morning.42 keywords, and so on. So, to define a function in Python you can use the following syntax:
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
Khi bạn mã hóa chức năng Python, bạn cần xác định tiêu đề với từ khóa
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
1, tên của hàm và danh sách các đối số trong ngoặc đơn. Lưu ý rằng danh sách các đối số là tùy chọn, nhưng dấu ngoặc đơn được yêu cầu về mặt cú pháp. Sau đó, bạn cần xác định khối mã chức năng, sẽ bắt đầu một cấp độ thụt bên phải.Trong ví dụ trên, bạn sử dụng câu lệnh
Hello and Good Morning.44. Loại tuyên bố này rất hữu ích khi bạn cần một câu lệnh trình giữ chỗ trong mã của mình để làm cho nó chính xác về mặt cú pháp, nhưng bạn không cần phải thực hiện bất kỳ hành động nào. Các tuyên bố
Hello and Good Morning.44 còn được gọi là hoạt động null vì họ không thực hiện bất kỳ hành động nào.null operation because they don’t perform any action.
Để sử dụng một chức năng, bạn cần gọi nó. Một cuộc gọi chức năng bao gồm tên hàm tên theo sau là các đối số chức năng trong ngoặc đơn:
function_name[arg1, arg2, ..., argN]
Bạn chỉ cần chuyển các đối số cho một cuộc gọi chức năng chỉ khi hàm yêu cầu chúng. Mặt khác, dấu ngoặc đơn luôn được yêu cầu trong một cuộc gọi chức năng. Nếu bạn quên chúng, thì bạn đã thắng được gọi chức năng nhưng tham khảo nó như một đối tượng chức năng.
Để làm cho các chức năng của bạn trả về một giá trị, bạn cần sử dụng câu lệnh Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Đó là những gì bạn có thể bao gồm từ thời điểm này.Hiểu tuyên bố của Python >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Câu lệnh Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 là một tuyên bố đặc biệt mà bạn có thể sử dụng bên trong một hàm hoặc phương thức để gửi kết quả của chức năng trở lại cho người gọi. Một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bao gồm từ khóa >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 theo sau là giá trị trả về tùy chọn.Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement is a special statement that you can use inside a function or method to send the function’s result back to the caller. A >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement consists of the >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 keyword followed by an optional return value.Giá trị trả về của hàm Python có thể là bất kỳ đối tượng Python nào. Tất cả mọi thứ trong Python là một đối tượng. Vì vậy, các chức năng của bạn có thể trả về các giá trị số [
Hello and Good Morning.51,
Hello and Good Morning.52 và
Hello and Good Morning.53], các bộ sưu tập và trình tự của các đối tượng [
Hello and Good Morning.54,
Hello and Good Morning.55,
Hello and Good Morning.56 hoặc
Hello and Good Morning.57 đối tượng]
Bạn có thể bỏ qua giá trị trả về của một hàm và sử dụng giá trị trả về không có giá trị trả về. Bạn cũng có thể bỏ qua toàn bộ tuyên bố
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Trong cả hai trường hợp, giá trị trả lại sẽ là Hello and Good Morning.60.
Trong hai phần tiếp theo, bạn sẽ bao gồm những điều cơ bản về cách thức câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 hoạt động và cách bạn có thể sử dụng nó để trả lại kết quả của chức năng trở lại mã người gọi.Báo cáo rõ ràng >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng ngay lập tức chấm dứt thực thi chức năng và gửi giá trị trả về lại mã người gọi. Để thêm câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng vào hàm Python, bạn cần sử dụng >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 theo sau là giá trị trả về tùy chọn:explicit >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement immediately terminates a function execution and sends the return value back to the caller code. To add an explicit >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement to a Python function, you need to use >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 followed by an optional return value:>>>
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
Khi bạn xác định
Hello and Good Morning.66, bạn sẽ thêm một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 [Hello and Good Morning.68] rõ ràng ở cuối khối mã chức năng.
Hello and Good Morning.69 là giá trị trả về rõ ràng của
Hello and Good Morning.66. Điều này có nghĩa là bất cứ khi nào bạn gọi
Hello and Good Morning.66, chức năng sẽ gửi lại
Hello and Good Morning.69 cho người gọi.
Nếu bạn xác định một hàm với câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng có giá trị trả về rõ ràng, thì bạn có thể sử dụng giá trị trả về đó trong bất kỳ biểu thức nào:>>>
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
Khi bạn xác định
Hello and Good Morning.66, bạn sẽ thêm một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 [Hello and Good Morning.68] rõ ràng ở cuối khối mã chức năng.
Hello and Good Morning.69 là giá trị trả về rõ ràng của
Hello and Good Morning.66. Điều này có nghĩa là bất cứ khi nào bạn gọi
Hello and Good Morning.66, chức năng sẽ gửi lại
Hello and Good Morning.69 cho người gọi.
>>>
>>> return 42
File "", line 1
SyntaxError: 'return' outside function
Khi bạn sử dụng
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bên ngoài một hàm hoặc phương thức, bạn sẽ nhận được một Hello and Good Morning.76 nói với bạn rằng câu lệnh có thể được sử dụng bên ngoài một hàm.
Bạn có thể sử dụng bất kỳ đối tượng Python nào làm giá trị trả về. Vì mọi thứ trong Python là một đối tượng, bạn có thể trả lại chuỗi, danh sách, bộ dữ liệu, từ điển, chức năng, lớp, phiên bản, đối tượng do người dùng xác định và thậm chí các mô-đun hoặc gói.
Ví dụ: giả sử bạn cần viết một hàm lấy danh sách các số nguyên và trả về danh sách chỉ chứa các số chẵn trong danh sách ban đầu. Ở đây, một cách mã hóa chức năng này:
>>>
>>> def get_even[numbers]:
... even_nums = [num for num in numbers if not num % 2]
... return even_nums
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
Hello and Good Morning.79 sử dụng khả năng hiểu danh sách để tạo danh sách lọc các số lẻ trong
Hello and Good Morning.80 gốc. Sau đó, hàm trả về danh sách kết quả, chỉ chứa số chẵn.
Một thực tế phổ biến là sử dụng kết quả của một biểu thức làm giá trị trả về trong câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Để áp dụng ý tưởng này, bạn có thể viết lại Hello and Good Morning.79 như sau:
>>>
>>> def get_even[numbers]:
... return [num for num in numbers if not num % 2]
...
>>> get_even[[1, 2, 3, 4, 5, 6]]
[2, 4, 6]
Danh sách hiểu được đánh giá và sau đó chức năng trả về với danh sách kết quả. Lưu ý rằng bạn chỉ có thể sử dụng các biểu thức trong câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Biểu thức khác với các câu lệnh như điều kiện hoặc vòng lặp.Ví dụ nữa, giả sử bạn cần tính giá trị trung bình của một mẫu của các giá trị số. Để làm điều đó, bạn cần chia tổng các giá trị cho số lượng giá trị. Ở đây, một ví dụ sử dụng các hàm tích hợp
Hello and Good Morning.84 và
Hello and Good Morning.85:
>>>
Hello and Good Morning.0
Trong
Hello and Good Morning.86, bạn không sử dụng một biến cục bộ để lưu trữ kết quả của phép tính. Thay vào đó, bạn sử dụng biểu thức trực tiếp làm giá trị trả về. Python trước tiên đánh giá biểu thức
Hello and Good Morning.87 và sau đó trả về kết quả của đánh giá, trong trường hợp này là giá trị
Hello and Good Morning.88.
Tuyên bố >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ẩn
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Hàm Python sẽ luôn có giá trị trả về. Không có khái niệm về thủ tục hoặc thói quen trong Python. Vì vậy, nếu bạn không sử dụng rõ ràng giá trị trả về trong câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 hoặc nếu bạn hoàn toàn bỏ qua câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, thì Python sẽ ngầm trả lại giá trị mặc định cho bạn. Giá trị trả về mặc định đó sẽ luôn là Hello and Good Morning.60.
Giả sử bạn viết một chức năng thêm
Hello and Good Morning.93 vào số
Hello and Good Morning.94, nhưng bạn quên cung cấp một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Trong trường hợp này, bạn sẽ nhận được một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ngầm sử dụng Hello and Good Morning.60 làm giá trị trả về:implicit
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement that uses Hello and Good Morning.60 as a return value:
>>>
Hello and Good Morning.1
Nếu bạn không cung cấp một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng với giá trị trả về rõ ràng, thì Python sẽ cung cấp một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ngầm bằng cách sử dụng Hello and Good Morning.60 làm giá trị trả về. Trong ví dụ trên,
2101 thêm
Hello and Good Morning.93 vào
Hello and Good Morning.94 và lưu trữ giá trị trong
2104 nhưng nó không trả lại
2104. Đó là lý do tại sao bạn nhận được
2106 thay vì
2107. Để khắc phục sự cố, bạn cần phải
2108 hoặc trực tiếp
2109.
Một ví dụ về một hàm trả về
Hello and Good Morning.60 là
2111. Mục tiêu của hàm này là in các đối tượng vào tệp luồng văn bản, thường là đầu ra tiêu chuẩn [màn hình của bạn]. Vì vậy, chức năng này không cần một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng vì nó không trả lời bất cứ điều gì hữu ích hoặc có ý nghĩa:>>>
Hello and Good Morning.2
Cuộc gọi đến
2111 in
2114 lên màn hình. Vì đây là mục đích của
2111, chức năng không cần phải trả về bất cứ điều gì hữu ích, vì vậy bạn nhận được
Hello and Good Morning.60 như một giá trị trả về.
Bất kể các chức năng của bạn là bao lâu và phức tạp, bất kỳ chức năng nào không có câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng hoặc một chức năng có câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 mà không có giá trị trả về, sẽ trả về Hello and Good Morning.60.
Trả lại vs in
Nếu bạn làm việc trong một phiên tương tác, thì bạn có thể nghĩ rằng in một giá trị và trả về một giá trị là các hoạt động tương đương. Xem xét hai chức năng sau và đầu ra của chúng:
>>>
Hello and Good Morning.3
Cả hai chức năng dường như làm điều tương tự. Trong cả hai trường hợp, bạn thấy
2114 được in trên màn hình của bạn. Ở đó, chỉ có một sự khác biệt có thể nhìn thấy tinh tế, các dấu ngoặc kép duy nhất trong ví dụ thứ hai. Nhưng hãy xem những gì xảy ra nếu bạn trả về một kiểu dữ liệu khác, hãy nói một đối tượng
Hello and Good Morning.51:
>>>
Hello and Good Morning.4
Bây giờ không có sự khác biệt có thể nhìn thấy. Trong cả hai trường hợp, bạn có thể thấy
Hello and Good Morning.69 trên màn hình của mình. Hành vi đó có thể gây nhầm lẫn nếu bạn chỉ bắt đầu với Python. Bạn có thể nghĩ rằng trả lại và in một giá trị là những hành động tương đương.
Bây giờ, giả sử bạn đang tiến sâu hơn vào Python và bạn bắt đầu viết kịch bản đầu tiên của mình. Bạn mở một trình soạn thảo văn bản và nhập mã sau:
Hello and Good Morning.5
2123 lấy hai số, thêm chúng và trả về kết quả. Trên dòng 5, bạn gọi
2123 đến tổng
Hello and Good Morning.28 cộng với
Hello and Good Morning.28. Vì bạn vẫn đang học sự khác biệt giữa trả lại và in một giá trị, bạn có thể mong đợi tập lệnh của mình sẽ in
2127 lên màn hình. Tuy nhiên, đó không phải là những gì xảy ra, và bạn không nhận được gì trên màn hình của mình.line 5, you call
2123 to sum
Hello and Good Morning.28 plus
Hello and Good Morning.28. Since you’re still learning the difference between returning and printing a value, you might expect your script to print
2127 to the screen. However, that’s not what happens, and you get nothing on your screen.
Hãy thử nó một mình. Lưu tập lệnh của bạn vào một tệp có tên
2128 và chạy nó từ dòng lệnh của bạn như sau:
Nếu bạn chạy
2128 từ dòng lệnh của mình, thì bạn đã giành được bất kỳ kết quả nào trên màn hình của bạn. Điều đó bởi vì khi bạn chạy một tập lệnh, các giá trị trả về của các hàm mà bạn gọi trong tập lệnh don lồng được in lên màn hình như chúng làm trong một phiên tương tác.
Nếu bạn muốn tập lệnh của bạn hiển thị kết quả của việc gọi
2123 trên màn hình của bạn, thì bạn cần gọi rõ ràng
2111. Kiểm tra bản cập nhật sau của
2128:
Hello and Good Morning.6
Bây giờ, khi bạn chạy
2128, bạn sẽ thấy số
2127 trên màn hình của bạn.
Vì vậy, nếu bạn làm việc trong một phiên tương tác, thì Python sẽ hiển thị kết quả của bất kỳ cuộc gọi chức năng nào trực tiếp đến màn hình của bạn. Nhưng nếu bạn đang viết một tập lệnh và bạn muốn xem một hàm giá trị trả về hàm, thì bạn cần sử dụng rõ ràng
2111.
Trả về nhiều giá trị
Bạn có thể sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 để trả về nhiều giá trị từ một hàm. Để làm điều đó, bạn chỉ cần cung cấp một số giá trị trả về được phân tách bằng dấu phẩy.Ví dụ: giả sử bạn cần viết một hàm lấy một mẫu dữ liệu số và trả về một bản tóm tắt các biện pháp thống kê. Để mã hóa chức năng đó, bạn có thể sử dụng mô -đun tiêu chuẩn Python
2137, cung cấp một số chức năng để tính toán số liệu thống kê toán học của dữ liệu số.
Ở đây, một triển khai có thể thực hiện chức năng của bạn:
Hello and Good Morning.7
Trong
2138, bạn tận dụng khả năng của Python, để trả về nhiều giá trị trong một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bằng cách trả về trung bình, trung bình và chế độ của mẫu cùng một lúc. Lưu ý rằng, để trả về nhiều giá trị, bạn chỉ cần viết chúng trong một danh sách được phân tách bằng dấu phẩy theo thứ tự bạn muốn chúng được trả về.Khi bạn đã mã hóa
2138, bạn có thể tận dụng một tính năng Python mạnh mẽ được gọi là không thể giải nén để giải nén ba biện pháp thành ba biến tách biệt hoặc bạn chỉ có thể lưu trữ mọi thứ trong một biến:
>>>
Hello and Good Morning.8
Ở đây, bạn giải nén ba giá trị trả về của
2138 vào các biến
2142,
2143 và
2144. Lưu ý rằng trong ví dụ cuối cùng, bạn lưu trữ tất cả các giá trị trong một biến duy nhất,
2145, hóa ra là Python
Hello and Good Morning.55.
Hàm tích hợp
2147 cũng là một ví dụ về hàm trả về nhiều giá trị. Hàm lấy hai số [không phức tạp] làm đối số và trả về hai số, thương số của hai giá trị đầu vào và phần còn lại của bộ phận:
>>>
Hello and Good Morning.9
Ở đây, bạn giải nén ba giá trị trả về của
2138 vào các biến
2142,
2143 và
2144. Lưu ý rằng trong ví dụ cuối cùng, bạn lưu trữ tất cả các giá trị trong một biến duy nhất,
2145, hóa ra là Python
Hello and Good Morning.55.
Hàm tích hợp
21
47 cũng là một ví dụ về hàm trả về nhiều giá trị. Hàm lấy hai số [không phức tạp] làm đối số và trả về hai số, thương số của hai giá trị đầu vào và phần còn lại của bộ phận:
Cuộc gọi đến
2147 trả về một tuple chứa thương số và phần còn lại là kết quả của việc chia hai số không phức tạp được cung cấp dưới dạng đối số. Đây là một ví dụ về một hàm có nhiều giá trị trả về.
Sử dụng tuyên bố Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6: Thực tiễn tốt nhấtCho đến nay, bạn đã đề cập đến những điều cơ bản về cách thức tuyên bố của Python >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Bây giờ bạn biết cách viết các chức năng trả về một hoặc nhiều giá trị cho người gọi. Ngoài ra, bạn đã học được rằng nếu bạn không thêm một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng với giá trị trả về rõ ràng cho một hàm nhất định, thì Python sẽ thêm nó cho bạn. Giá trị đó sẽ là Hello and Good Morning.
60.
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Trong phần này, bạn sẽ bao gồm một số ví dụ sẽ hướng dẫn bạn thông qua một tập hợp các thực tiễn lập trình tốt để sử dụng một cách hiệu quả câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Những thực tiễn này sẽ giúp bạn viết các chức năng dễ đọc hơn, có thể duy trì, mạnh mẽ và hiệu quả hơn trong Python.procedure.Trả lại
Hello and Good Morning.60 một cách rõ ràng
Một số lập trình viên dựa vào tuyên bố
6 ngầm mà Python thêm vào bất kỳ chức năng nào mà không có một chức năng rõ ràng. Điều này có thể gây nhầm lẫn cho các nhà phát triển đến từ các ngôn ngữ lập trình khác trong đó một hàm không có giá trị trả về được gọi là thủ tục.>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
Có những tình huống trong đó bạn có thể thêm một
21
56 rõ ràng vào các chức năng của bạn. Tuy nhiên, trong các tình huống khác, bạn có thể dựa vào hành vi mặc định của Python:
Nếu chức năng của bạn thực hiện các hành động nhưng không có giá trị
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng và hữu ích, thì bạn có thể bỏ qua trả lại Hello and Good Morning.60 vì làm điều đó sẽ là thừa và khó hiểu. Bạn cũng có thể sử dụng giá trị trả lại mà không có giá trị trả về chỉ để làm rõ ý định của bạn trở về từ chức năng.
Nếu chức năng của bạn có nhiều câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 và trả về Hello and Good Morning.60 là một tùy chọn hợp lệ, thì bạn nên xem xét việc sử dụng rõ ràng
2156 thay vì dựa vào hành vi mặc định của Python.
- Bỏ qua câu lệnh
6 và dựa vào hành vi mặc định là trả về>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
Hello and Good Morning.
60. - Sử dụng giá trị trả lại mà không có giá trị trả về, cũng trả về
Hello and Good Morning.
60. - Trả lại
Hello and Good Morning.
60 một cách rõ ràng.
Ở đây, cách thức hoạt động của nó trong thực tế:
>>>
210
Có hay không trả lại
Hello and Good Morning.60 rõ ràng là một quyết định cá nhân. Tuy nhiên, bạn nên xem xét rằng trong một số trường hợp, một
2156 rõ ràng có thể tránh các vấn đề về khả năng duy trì. Điều này đặc biệt đúng đối với các nhà phát triển đến từ các ngôn ngữ lập trình khác mà don hành xử như Python.
Ghi nhớ giá trị trả về
Khi viết các chức năng tùy chỉnh, bạn có thể vô tình quên trả về giá trị từ một hàm. Trong trường hợp này, Python sẽ trả lại
Hello and Good Morning.60 cho bạn. Điều này có thể khiến các lỗi tinh tế có thể khó khăn cho một nhà phát triển Python khởi đầu để hiểu và gỡ lỗi.
Bạn có thể tránh vấn đề này bằng cách viết câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ngay sau khi tiêu đề của hàm. Sau đó, bạn có thể thực hiện một đường chuyền thứ hai để viết cơ thể chức năng. Dưới đây, một mẫu mà bạn có thể sử dụng khi mã hóa các chức năng Python của mình:211
Nếu bạn đã quen với việc bắt đầu các chức năng của mình như thế này, thì rất có thể bạn sẽ không bỏ lỡ câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 nữa. Với cách tiếp cận này, bạn có thể viết phần thân của hàm, kiểm tra nó và đổi tên các biến khi bạn biết rằng hàm hoạt động.Thực tiễn này có thể tăng năng suất của bạn và làm cho các chức năng của bạn ít dễ bị lỗi hơn. Nó cũng có thể giúp bạn tiết kiệm rất nhiều thời gian gỡ lỗi.
Tránh các biểu thức phức tạp
Như bạn đã thấy trước đây, nó là một thực tế phổ biến để sử dụng kết quả của một biểu thức làm giá trị trả về trong các hàm Python. Nếu biểu thức mà bạn sử dụng trở nên quá phức tạp, thì thực tế này có thể dẫn đến các chức năng khó hiểu, gỡ lỗi và duy trì.
Ví dụ: nếu bạn đang thực hiện một tính toán phức tạp, thì sẽ dễ đọc hơn để tính toán kết quả cuối cùng bằng cách sử dụng các biến tạm thời với các tên có ý nghĩa.temporary variables with meaningful names.
Xem xét chức năng sau đây tính toán phương sai của mẫu dữ liệu số:
>>>
212
Có hay không trả lại
Hello and Good Morning.60 rõ ràng là một quyết định cá nhân. Tuy nhiên, bạn nên xem xét rằng trong một số trường hợp, một
2156 rõ ràng có thể tránh các vấn đề về khả năng duy trì. Điều này đặc biệt đúng đối với các nhà phát triển đến từ các ngôn ngữ lập trình khác mà don hành xử như Python.
Ghi nhớ giá trị trả về
>>>
213
Có hay không trả lại
Hello and Good Morning.60 rõ ràng là một quyết định cá nhân. Tuy nhiên, bạn nên xem xét rằng trong một số trường hợp, một
2156 rõ ràng có thể tránh các vấn đề về khả năng duy trì. Điều này đặc biệt đúng đối với các nhà phát triển đến từ các ngôn ngữ lập trình khác mà don hành xử như Python.
Ghi nhớ giá trị trả về
Khi viết các chức năng tùy chỉnh, bạn có thể vô tình quên trả về giá trị từ một hàm. Trong trường hợp này, Python sẽ trả lại
Hello and Good Morning.60 cho bạn. Điều này có thể khiến các lỗi tinh tế có thể khó khăn cho một nhà phát triển Python khởi đầu để hiểu và gỡ lỗi.
Bạn có thể tránh vấn đề này bằng cách viết câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ngay sau khi tiêu đề của hàm. Sau đó, bạn có thể thực hiện một đường chuyền thứ hai để viết cơ thể chức năng. Dưới đây, một mẫu mà bạn có thể sử dụng khi mã hóa các chức năng Python của mình:
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Nếu bạn đã quen với việc bắt đầu các chức năng của mình như thế này, thì rất có thể bạn sẽ không bỏ lỡ câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 nữa. Với cách tiếp cận này, bạn có thể viết phần thân của hàm, kiểm tra nó và đổi tên các biến khi bạn biết rằng hàm hoạt động.side effect can be, for example, printing something to the screen, modifying a global variable, updating the state of an object, writing some text to a
file, and so on.Thực tiễn này có thể tăng năng suất của bạn và làm cho các chức năng của bạn ít dễ bị lỗi hơn. Nó cũng có thể giúp bạn tiết kiệm rất nhiều thời gian gỡ lỗi.
Tránh các biểu thức phức tạp
Như bạn đã thấy trước đây, nó là một thực tế phổ biến để sử dụng kết quả của một biểu thức làm giá trị trả về trong các hàm Python. Nếu biểu thức mà bạn sử dụng trở nên quá phức tạp, thì thực tế này có thể dẫn đến các chức năng khó hiểu, gỡ lỗi và duy trì.self-contained functions that take some arguments and return a useful value [or values] without causing any side effect on global variables.
Ví dụ: nếu bạn đang thực hiện một tính toán phức tạp, thì sẽ dễ đọc hơn để tính toán kết quả cuối cùng bằng cách sử dụng các biến tạm thời với các tên có ý nghĩa.
Xem xét chức năng sau đây tính toán phương sai của mẫu dữ liệu số:
>>>
214
Trong ví dụ này, trước tiên bạn tạo một biến toàn cầu,
2185, với giá trị ban đầu là
2186. Bên trong
2187, bạn sử dụng câu lệnh
2184 để cho biết chức năng rằng bạn muốn sửa đổi một biến toàn cầu. Câu lệnh cuối cùng tăng
2185 bởi
Hello and Good Morning.93.
Kết quả của việc gọi
2187 sẽ phụ thuộc vào giá trị ban đầu là
2185. Các giá trị ban đầu khác nhau cho
2185 sẽ tạo ra các kết quả khác nhau, do đó, kết quả của chức năng có thể được kiểm soát bởi chính hàm.
Để tránh loại hành vi này, bạn có thể viết một
2187 khép kín, lấy các đối số và trả về một giá trị mạch lạc chỉ phụ thuộc vào các đối số đầu vào:
>>>
215
Bây giờ kết quả của việc gọi
2187 chỉ phụ thuộc vào các đối số đầu vào thay vì vào giá trị ban đầu là
2185. Điều này làm cho chức năng mạnh mẽ và dễ kiểm tra hơn.
Ngoài ra, khi bạn cần cập nhật
2185, bạn có thể thực hiện rõ ràng với một cuộc gọi đến
2187. Bằng cách này, bạn sẽ có nhiều quyền kiểm soát hơn đối với những gì xảy ra với
2185 trong suốt mã của bạn.
Nói chung, nó là một thực tiễn tốt để tránh các chức năng sửa đổi các biến toàn cầu. Nếu có thể, hãy cố gắng viết các chức năng độc lập với một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng trả về một giá trị mạch lạc và có ý nghĩa.self-contained functions with an explicit >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 statement that returns a coherent and meaningful value.Sử dụng >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 với các điều kiện
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Các hàm Python không bị hạn chế để có một tuyên bố
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 duy nhất. Nếu một hàm nhất định có nhiều hơn một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, thì mô hình đầu tiên gặp phải sẽ xác định kết thúc thực thi chức năng và cả giá trị trả về của nó.Một cách phổ biến để viết các chức năng với nhiều câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 là sử dụng các câu lệnh có điều kiện cho phép bạn cung cấp các câu >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 khác nhau tùy thuộc vào kết quả của việc đánh giá một số điều kiện.Giả sử bạn cần mã hóa một hàm lấy một số và trả về giá trị tuyệt đối của nó. Nếu số lớn hơn
2186, thì bạn sẽ trả về cùng một số. Nếu số nhỏ hơn
2186, thì bạn sẽ trả về giá trị đối diện hoặc không âm.
Ở đây, một triển khai có thể cho chức năng này:
>>>
216
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
08 có hai câu >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng, mỗi câu trong số chúng được bọc trong tuyên bố def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 của riêng mình. Nó cũng có một tuyên bố >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ngầm. Nếu def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
12 xảy ra là 2186, thì không điều kiện nào là đúng và chức năng kết thúc mà không nhấn bất kỳ câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng nào. Khi điều này xảy ra, bạn tự động nhận được Hello and Good Morning.60.
Hãy xem cuộc gọi sau đây đến
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
08 bằng cách sử dụng 2186 làm đối số:
>>>
217
Khi bạn gọi
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
08 bằng cách sử dụng 2186 làm đối số, kết quả là bạn sẽ nhận được
Hello and Good Morning.60. Điều đó bởi vì dòng thực thi đi đến cuối hàm mà không đạt được bất kỳ câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rõ ràng nào. Thật không may, giá trị tuyệt đối của 2186 là
2186, không phải
Hello and Good Morning.60.
Để khắc phục sự cố này, bạn có thể thêm câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 thứ ba, trong một mệnh đề def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
26 mới hoặc trong một điều khoản def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
27 cuối cùng:>>>
218
Bây giờ,
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
08 kiểm tra mọi điều kiện có thể, def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
29, def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
30 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
31. Mục đích của ví dụ này là chỉ ra rằng khi bạn sử dụng các câu lệnh có điều kiện để cung cấp nhiều câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, bạn cần đảm bảo rằng mọi tùy chọn có thể đều có câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 riêng. Nếu không, chức năng của bạn sẽ có một lỗi ẩn.Cuối cùng, bạn có thể thực hiện
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
08 theo cách ngắn gọn, hiệu quả và pythonic hơn bằng cách sử dụng một câu lệnh def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 duy nhất:>>>
219
Trong trường hợp này, chức năng của bạn nhấn vào câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 đầu tiên nếu def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
30. Trong tất cả các trường hợp khác, cho dù def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
29 hay def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
31, nó sẽ đạt được câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 thứ hai. Với triển khai mới này, chức năng của bạn trông tốt hơn rất nhiều. Nó dễ đọc hơn, súc tích và hiệu quả hơn.Nếu bạn sử dụng các câu lệnh
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 để cung cấp một số câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, thì bạn không cần một điều khoản def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
27 để nêu điều kiện cuối cùng. Chỉ cần thêm một câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 ở cuối khối mã chức năng và ở cấp độ đầu tiên của thụt.Trở về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 hoặc def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
Một trường hợp sử dụng phổ biến khác cho sự kết hợp của các câu lệnh
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 và >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 là khi bạn mã hóa một hàm có giá trị vị ngữ hoặc boolean. Loại chức năng này trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 hoặc def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46 theo một điều kiện nhất định.Ví dụ: giả sử bạn cần viết một hàm có hai số nguyên,
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52 và trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 nếu def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 chia hết cho def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52. Nếu không, chức năng sẽ trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46. Đây là một triển khai có thể:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
0def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
57 Trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 Nếu phần còn lại chia def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 cho def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52 bằng 2186. Nếu không, nó trả về
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46. Lưu ý rằng trong Python, giá trị 2186 là giả, vì vậy bạn cần sử dụng toán tử
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
64 để phủ nhận giá trị sự thật của điều kiện.Đôi khi, bạn sẽ viết các chức năng vị ngữ liên quan đến các nhà khai thác như sau:
- Các toán tử so sánh
65,def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
66,def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
67,def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
68,def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
69 vàdef function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
70def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
- Nhà điều hành thành viên
71def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
- Toán tử nhận dạng
72def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
- Nhà điều hành Boolean
64def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
Trong những trường hợp này, bạn có thể trực tiếp sử dụng biểu thức boolean trong câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 của mình. Điều này là có thể bởi vì các toán tử này trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 hoặc def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46. Theo ý tưởng này, ở đây, một triển khai mới của def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
57:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
1Nếu
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 chia hết cho def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52, thì def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
80 trả về 2186, đó là giả mạo trong Python. Vì vậy, để trả về
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45, bạn cần sử dụng toán tử def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
64.Mặt khác, nếu bạn cố gắng sử dụng các điều kiện liên quan đến các nhà khai thác boolean như
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
84 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
85 theo cách bạn đã thấy trước đây, thì các chức năng vị ngữ của bạn đã giành được công việc chính xác. Điều đó bởi vì các nhà khai thác này hành xử khác nhau. Họ trả lại một trong các toán hạng trong điều kiện thay vì def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 hoặc def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
2Nói chung,
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
85 trả về toán hạng sai đầu tiên hoặc toán hạng cuối cùng. Mặt khác, def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
84 trả về toán hạng thực sự đầu tiên hoặc toán hạng cuối cùng. Vì vậy, để viết một vị từ liên quan đến một trong những toán tử này, bạn sẽ cần sử dụng câu lệnh def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 rõ ràng hoặc cuộc gọi đến chức năng tích hợp def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
91.Giả sử bạn muốn viết một hàm vị ngữ có hai giá trị và trả về
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 nếu cả hai đều đúng và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46 nếu không. Ở đây, cách tiếp cận đầu tiên của bạn đối với chức năng này:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
3Vì
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
85 trả về các toán hạng thay vì def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 hoặc def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46, chức năng của bạn không hoạt động chính xác. Có ít nhất ba khả năng để khắc phục sự cố này:- Một tuyên bố rõ ràng
10def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
- Một biểu thức có điều kiện [toán tử ternary]
- Hàm Python tích hợp
91def function_name[arg1, arg2,..., argN]: # Function's code goes here... pass
Nếu bạn sử dụng phương pháp đầu tiên, thì bạn có thể viết
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
99 như sau:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
4Tuyên bố
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10 kiểm tra xem def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52 đều là sự thật. Nếu vậy, def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
99 trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45. Nếu không, nó trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46.Mặt khác, nếu bạn sử dụng biểu thức có điều kiện Python hoặc toán tử ternary, thì bạn có thể viết chức năng vị ngữ của mình như sau:
>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
5Ở đây, bạn sử dụng một biểu thức có điều kiện để cung cấp giá trị trả lại cho
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
99. Biểu thức có điều kiện được đánh giá là def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 nếu cả def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52 đều là sự thật. Mặt khác, kết quả cuối cùng là def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46.Cuối cùng, nếu bạn sử dụng
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
91, thì bạn có thể mã def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
99 như sau:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
6def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
91 Trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 nếu def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
51 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
52 là đúng và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46 khác. Nó tùy thuộc vào bạn những gì cách tiếp cận để sử dụng để giải quyết vấn đề này. Tuy nhiên, giải pháp thứ hai có vẻ dễ đọc hơn. Bạn nghĩ sao?Các vòng ngắn mạch
Một câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bên trong một vòng lặp thực hiện một số loại ngắn mạch. Nó phá vỡ thực thi vòng lặp và làm cho chức năng trở lại ngay lập tức. Để hiểu rõ hơn về hành vi này, bạn có thể viết một hàm mô phỏng function_name[arg1, arg2, ..., argN]
19. Chức năng tích hợp này có thể lặp lại và trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 nếu ít nhất một trong số các mục của nó là sự thật.short-circuit. It breaks the loop execution and makes the function return immediately. To better
understand this behavior, you can write a function that emulates function_name[arg1, arg2, ..., argN]
19. This built-in function takes an iterable and returns def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45 if at least one of its items is truthy.Để mô phỏng
function_name[arg1, arg2, ..., argN]
19, bạn có thể mã hóa một chức năng như sau:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
7Nếu bất kỳ
function_name[arg1, arg2, ..., argN]
22 nào trong function_name[arg1, arg2, ..., argN]
23 là đúng, thì dòng thực thi đi vào khối def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10. Câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 phá vỡ vòng lặp và trả về ngay lập tức với giá trị trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
45. Nếu không có giá trị trong function_name[arg1, arg2, ..., argN]
23 là đúng, thì function_name[arg1, arg2, ..., argN]
28 trả về def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46.Hàm này thực hiện đánh giá ngắn mạch. Ví dụ, giả sử rằng bạn vượt qua một điều có thể chứa một triệu vật phẩm. Nếu mục đầu tiên trong đó có thể xảy ra là đúng, thì vòng lặp chỉ chạy một lần thay vì một triệu lần. Điều này có thể giúp bạn tiết kiệm rất nhiều thời gian xử lý khi chạy mã của bạn.short-circuit evaluation. For example, suppose that you pass an iterable that contains a million items. If the first item in that iterable happens to be true, then the loop runs only one time rather than a million times. This can save you a lot of processing time when running your code.
Điều quan trọng cần lưu ý là để sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bên trong một vòng lặp, bạn cần kết thúc câu lệnh trong một câu lệnh def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10. Nếu không, vòng lặp sẽ luôn bị vỡ trong lần lặp đầu tiên của nó.Nhận ra mã chết
Ngay khi một hàm nhấn vào câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, nó sẽ chấm dứt mà không thực thi bất kỳ mã tiếp theo nào. Do đó, mã xuất hiện sau câu lệnh của hàm ____ ____66 thường được gọi là mã chết. Trình thông dịch Python hoàn toàn bỏ qua mã chết khi chạy các chức năng của bạn. Vì vậy, có loại mã đó trong một hàm là vô dụng và khó hiểu.dead code. The Python interpreter totally ignores dead code when running your functions. So, having that kind of code in a function is useless and confusing.Xem xét chức năng sau, thêm mã sau câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
8Tuyên bố
function_name[arg1, arg2, ..., argN]
35 trong ví dụ này sẽ không bao giờ thực thi vì câu lệnh đó xuất hiện sau câu lệnh của hàm >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Xác định mã chết và xóa nó là một thực tế tốt mà bạn có thể áp dụng để viết các chức năng tốt hơn.Điều đáng chú ý là nếu bạn sử dụng các câu lệnh có điều kiện để cung cấp nhiều câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, thì bạn có thể có mã sau một tuyên bố >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rằng won đã chết miễn là nó bên ngoài tuyên bố def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10:>>>
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
9Tuyên bố
function_name[arg1, arg2, ..., argN]
35 trong ví dụ này sẽ không bao giờ thực thi vì câu lệnh đó xuất hiện sau câu lệnh của hàm >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6. Xác định mã chết và xóa nó là một thực tế tốt mà bạn có thể áp dụng để viết các chức năng tốt hơn.Điều đáng chú ý là nếu bạn sử dụng các câu lệnh có điều kiện để cung cấp nhiều câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, thì bạn có thể có mã sau một tuyên bố >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 rằng won đã chết miễn là nó bên ngoài tuyên bố def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
10:
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
Mặc dù cuộc gọi đến
2111 là sau tuyên bố
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, nhưng nó không phải là mã chết. Khi function_name[arg1, arg2, ..., argN]
42 được đánh giá thành def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
46, cuộc gọi 2111 được chạy và bạn nhận được
2114 được in lên màn hình của bạn.
Trả lại nhiều đối tượng được đặt tên
- Khi bạn viết một hàm trả về nhiều giá trị trong một câu lệnh
6, bạn có thể xem xét sử dụng đối tượng>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
47 để làm cho các hàm của bạn dễ đọc hơn.function_name[arg1, arg2, ..., argN]
48 là một lớp thu thập trả về một lớp con củafunction_name[arg1, arg2, ..., argN]
Hello and Good Morning.
55 có các trường hoặc thuộc tính. Bạn có thể truy cập các thuộc tính đó bằng cách sử dụng ký hiệu DOT hoặc thao tác lập chỉ mục. holds the name of the tuple-like class that you’re creating. It needs to be a string. - Bộ khởi tạo của
48 có một số đối số. Tuy nhiên, để bắt đầu sử dụngfunction_name[arg1, arg2, ..., argN]
48 trong mã của mình, bạn chỉ cần biết về hai cái đầu tiên: holds the names of the fields or attributes of the tuple-like class. It can be a sequence of strings such asfunction_name[arg1, arg2, ..., argN]
54 or a single string with each name separated by whitespace or commas, such asfunction_name[arg1, arg2, ..., argN]
55 orfunction_name[arg1, arg2, ..., argN]
56.function_name[arg1, arg2, ..., argN]
function_name[arg1, arg2, ..., argN]
52 giữ tên của lớp giống như tuple mà bạn đang tạo ra. Nó cần phải là một chuỗi.function_name[arg1, arg2, ..., argN]
0function_name[arg1, arg2, ..., argN]
53 giữ tên của các trường hoặc thuộc tính của lớp giống như tuple. Nó có thể là một chuỗi các chuỗi như function_name[arg1, arg2, ..., argN]
54 hoặc một chuỗi duy nhất với mỗi tên được phân tách bằng khoảng trắng hoặc dấu phẩy, chẳng hạn như function_name[arg1, arg2, ..., argN]
55 hoặc function_name[arg1, arg2, ..., argN]
56.Sử dụng
function_name[arg1, arg2, ..., argN]
48 khi bạn cần trả về nhiều giá trị có thể làm cho các chức năng của bạn dễ đọc hơn đáng kể mà không cần quá nhiều nỗ lực. Xem xét bản cập nhật sau của 2138 bằng cách sử dụng
function_name[arg1, arg2, ..., argN]
48 làm giá trị trả về:Bên trong
2138, bạn tạo một
function_name[arg1, arg2, ..., argN]
48 được gọi là function_name[arg1, arg2, ..., argN]
62. Đối tượng này có thể có các thuộc tính được đặt tên mà bạn có thể truy cập bằng cách sử dụng ký hiệu DOT hoặc bằng cách sử dụng thao tác lập chỉ mục. Trong ví dụ này, các thuộc tính đó là function_name[arg1, arg2, ..., argN]
63, function_name[arg1, arg2, ..., argN]
64 và function_name[arg1, arg2, ..., argN]
65.>>>
function_name[arg1, arg2, ..., argN]
1Bạn có thể tạo một đối tượng
function_name[arg1, arg2, ..., argN]
62 và sử dụng nó làm giá trị trả về. Để làm điều đó, bạn cần khởi tạo function_name[arg1, arg2, ..., argN]
62 như bạn đã làm với bất kỳ lớp Python nào. Lưu ý rằng bạn cần cung cấp một giá trị cụ thể cho từng thuộc tính được đặt tên, giống như bạn đã làm trong câu lệnh >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 của bạn.Ở đây, cách thức hoạt động của
2138:
Khi bạn gọi
21
38 với một mẫu dữ liệu số, bạn sẽ nhận được một đối tượng function_name[arg1, arg2, ..., argN]
48 chứa trung bình, trung bình và chế độ của mẫu. Lưu ý rằng bạn có thể truy cập từng phần tử của bộ tuple bằng cách sử dụng ký hiệu DOT hoặc thao tác lập chỉ mục.
function_name[arg1, arg2, ..., argN]
Cuối cùng, bạn cũng có thể sử dụng một thao tác giải nén có thể lặp lại để lưu trữ từng giá trị trong biến độc lập của riêng nó.
Chức năng trả lại: Đóng cửaclosure.
Trong Python, các chức năng là các đối tượng hạng nhất. Đối tượng hạng nhất là một đối tượng có thể được gán cho một biến, được truyền dưới dạng đối số cho một hàm hoặc được sử dụng làm giá trị trả về trong một hàm. Vì vậy, bạn có thể sử dụng một đối tượng hàm làm giá trị trả về trong bất kỳ câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 nào.Một hàm có chức năng làm đối số, kết quả là trả về một hàm hoặc cả hai đều là hàm bậc cao hơn. Chức năng của nhà máy đóng cửa là một ví dụ phổ biến về chức năng bậc cao trong Python. Loại chức năng này có một số đối số và trả về một hàm bên trong. Hàm bên trong thường được gọi là đóng cửa.
function_name[arg1, arg2, ..., argN]
2Một đóng cửa mang thông tin về phạm vi thực thi kèm theo của nó. Điều này cung cấp một cách để giữ lại thông tin trạng thái giữa các cuộc gọi chức năng. Các chức năng của nhà máy đóng cửa là hữu ích khi bạn cần viết mã dựa trên khái niệm đánh giá lười biếng hoặc bị trì hoãn.
Giả sử bạn cần viết một hàm trợ giúp có một số và trả về kết quả của việc nhân số đó với một yếu tố nhất định. Bạn có thể mã hóa chức năng đó như sau:
>>>
function_name[arg1, arg2, ..., argN]
3function_name[arg1, arg2, ..., argN]
73 lấy function_name[arg1, arg2, ..., argN]
74 và def function_name[arg1, arg2,..., argN]:
# Function's code goes here...
pass
12 làm đối số và trả lại sản phẩm của họ. Vì function_name[arg1, arg2, ..., argN]
74 hiếm khi thay đổi trong ứng dụng của bạn, bạn thấy khó chịu khi cung cấp cùng một yếu tố trong mọi cuộc gọi chức năng. Vì vậy, bạn cần một cách để giữ lại trạng thái hoặc giá trị của function_name[arg1, arg2, ..., argN]
74 giữa các cuộc gọi đến function_name[arg1, arg2, ..., argN]
73 và chỉ thay đổi nó khi cần. Để giữ lại giá trị hiện tại của function_name[arg1, arg2, ..., argN]
74 giữa các cuộc gọi, bạn có thể sử dụng đóng cửa.Lưu ý rằng bạn có thể tự do sử dụng lại
function_name[arg1, arg2, ..., argN]
86 và function_name[arg1, arg2, ..., argN]
89 vì họ không quên thông tin trạng thái tương ứng của họ.Bạn cũng có thể sử dụng chức năng
Hello and Good Morning.17 để tạo đóng cửa. Đôi khi việc sử dụng chức năng
Hello and Good Morning.17 có thể làm cho nhà máy đóng cửa của bạn ngắn gọn hơn. Tại đây, một triển khai thay thế của
function_name[arg1, arg2, ..., argN]
73 bằng cách sử dụng hàm Hello and Good Morning.17:
>>>
function_name[arg1, arg2, ..., argN]
4Việc thực hiện này hoạt động giống như ví dụ ban đầu. Trong trường hợp này, việc sử dụng hàm
Hello and Good Morning.17 cung cấp một cách nhanh chóng và ngắn gọn để mã
function_name[arg1, arg2, ..., argN]
73.Chức năng lấy và trả lại: Người trang trí
Một cách khác để sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 để trả về các đối tượng chức năng là viết các chức năng trang trí. Một hàm trang trí lấy một đối tượng hàm làm đối số và trả về một đối tượng hàm. Bộ trang trí xử lý chức năng được trang trí theo một cách nào đó và trả lại hoặc thay thế nó bằng một chức năng hoặc đối tượng có thể gọi được.decorator
function takes a function object as an argument and returns a function object. The decorator processes the decorated function in some way and returns it or replaces it with another function or callable object.Các nhà trang trí rất hữu ích khi bạn cần thêm logic bổ sung cho các chức năng hiện có mà không cần sửa đổi chúng. Ví dụ: bạn có thể mã hóa một trình trang trí để ghi nhật ký các cuộc gọi chức năng, xác thực các đối số vào một hàm, đo thời gian thực hiện của một hàm nhất định, v.v.
Ví dụ sau đây cho thấy chức năng trang trí mà bạn có thể sử dụng để có ý tưởng về thời gian thực hiện của một hàm Python nhất định:
>>>
function_name[arg1, arg2, ..., argN]
5Việc thực hiện này hoạt động giống như ví dụ ban đầu. Trong trường hợp này, việc sử dụng hàm
Hello and Good Morning.17 cung cấp một cách nhanh chóng và ngắn gọn để mã
function_name[arg1, arg2, ..., argN]
73.Chức năng lấy và trả lại: Người trang trí
Một cách khác để sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 để trả về các đối tượng chức năng là viết các chức năng trang trí. Một hàm trang trí lấy một đối tượng hàm làm đối số và trả về một đối tượng hàm. Bộ trang trí xử lý chức năng được trang trí theo một cách nào đó và trả lại hoặc thay thế nó bằng một chức năng hoặc đối tượng có thể gọi được.Các nhà trang trí rất hữu ích khi bạn cần thêm logic bổ sung cho các chức năng hiện có mà không cần sửa đổi chúng. Ví dụ: bạn có thể mã hóa một trình trang trí để ghi nhật ký các cuộc gọi chức năng, xác thực các đối số vào một hàm, đo thời gian thực hiện của một hàm nhất định, v.v.
Ví dụ sau đây cho thấy chức năng trang trí mà bạn có thể sử dụng để có ý tưởng về thời gian thực hiện của một hàm Python nhất định:
Cú pháp
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
01 phía trên tiêu đề của >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02 tương đương với biểu thức >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
03. Trong trường hợp này, bạn có thể nói rằng >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
04 đang trang trí >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02.Python chạy các chức năng trang trí ngay khi bạn nhập hoặc chạy mô -đun hoặc tập lệnh. Vì vậy, khi bạn gọi
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02, bạn thực sự gọi giá trị trả lại của >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
04, đây là đối tượng hàm >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
08. Cuộc gọi đến >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02 được trang trí sẽ trả về giá trị trung bình của mẫu và cũng sẽ đo thời gian thực hiện của >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02 ban đầu.Trong trường hợp này, bạn sử dụng
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
11 để đo thời gian thực hiện bên trong người trang trí. >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
11 sống trong một mô-đun có tên >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
13 cung cấp một tập hợp các chức năng liên quan đến thời gian. >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
11 trả về thời gian tính bằng giây kể từ thời đại như một số điểm nổi. Sự khác biệt giữa thời gian trước và sau cuộc gọi đến >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
02 sẽ cho bạn ý tưởng về thời gian thực hiện chức năng.function_name[arg1, arg2, ..., argN]
6Các ví dụ phổ biến khác về các nhà trang trí trong Python là
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
16, >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
17 và >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
18. Nếu bạn muốn đi sâu hơn vào các nhà trang trí Python, thì hãy xem Primer trên các nhà trang trí Python. Bạn cũng có thể kiểm tra các nhà trang trí Python 101.function_name[arg1, arg2, ..., argN]
7Trả về các đối tượng do người dùng xác định: mẫu nhà máy
>>>
function_name[arg1, arg2, ..., argN]
8Việc thực hiện này hoạt động giống như ví dụ ban đầu. Trong trường hợp này, việc sử dụng hàm
Hello and Good Morning.17 cung cấp một cách nhanh chóng và ngắn gọn để mã
function_name[arg1, arg2, ..., argN]
73.Chức năng lấy và trả lại: Người trang trí
Một cách khác để sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 để trả về các đối tượng chức năng là viết các chức năng trang trí. Một hàm trang trí lấy một đối tượng hàm làm đối số và trả về một đối tượng hàm. Bộ trang trí xử lý chức năng được trang trí theo một cách nào đó và trả lại hoặc thay thế nó bằng một chức năng hoặc đối tượng có thể gọi được.>>>
function_name[arg1, arg2, ..., argN]
9Các nhà trang trí rất hữu ích khi bạn cần thêm logic bổ sung cho các chức năng hiện có mà không cần sửa đổi chúng. Ví dụ: bạn có thể mã hóa một trình trang trí để ghi nhật ký các cuộc gọi chức năng, xác thực các đối số vào một hàm, đo thời gian thực hiện của một hàm nhất định, v.v.
Sử dụng >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 trong các chức năng của máy phát
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
Hàm Python với câu lệnh
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
40 trong cơ thể của nó là một hàm máy phát. Khi bạn gọi một hàm trình tạo, nó sẽ trả về một trình lặp lại máy phát. Vì vậy, bạn có thể nói rằng một chức năng máy phát là một nhà máy máy phát.generator function. When you call a generator function, it returns a generator iterator. So, you can say that a generator function is a generator factory.Bạn có thể sử dụng câu lệnh
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 bên trong hàm trình tạo để chỉ ra rằng trình tạo đã được thực hiện. Tuyên bố >>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 sẽ làm cho trình tạo tăng >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
43. Giá trị trả về sẽ được truyền dưới dạng đối số cho trình khởi tạo của >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
43 và sẽ được gán cho thuộc tính >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
45 của nó.Ở đây, một trình tạo mang lại
Hello and Good Morning.93 và
Hello and Good Morning.28 theo yêu cầu và sau đó trả về
function_name[arg1, arg2, ..., argN]
91:>>>
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
0>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
49 Trả về một đối tượng Trình tạo mang lại Hello and Good Morning.93 và
Hello and Good Morning.28 theo yêu cầu. Để truy xuất từng số biểu mẫu đối tượng Trình tạo, bạn có thể sử dụng
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
52, đây là chức năng tích hợp để truy xuất mục tiếp theo từ Trình tạo Python.Hai cuộc gọi đầu tiên đến
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
52 truy xuất lần lượt Hello and Good Morning.93 và
Hello and Good Morning.28. Trong cuộc gọi thứ ba, máy phát điện đã kiệt sức và bạn nhận được
>>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
43. Lưu ý rằng giá trị trả về của hàm máy phát [function_name[arg1, arg2, ..., argN]
91] trở thành thuộc tính >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
45 của đối tượng >>> def return_42[]:
... return 42 # An explicit return statement
...
>>> return_42[] # The caller code gets 42
42
43.Sự kết luận
Câu lệnh Python
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6 cho phép bạn gửi bất kỳ đối tượng Python nào từ các chức năng tùy chỉnh của bạn trở lại mã người gọi. Tuyên bố này là một phần cơ bản của bất kỳ chức năng hoặc phương pháp Python nào. Nếu bạn thành thạo cách sử dụng nó, thì bạn sẽ sẵn sàng mã hóa các chức năng mạnh mẽ.Trong hướng dẫn này, bạn đã học được cách:
- Sử dụng hiệu quả câu lệnh Python
6 trong các chức năng của bạnPython>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
6 statement in your functions>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
- Trả lại một hoặc nhiều giá trị từ các chức năng của bạn cho mã người gọisingle or multiple values from your functions to the caller code
- Áp dụng các thực tiễn tốt nhất khi sử dụng câu lệnh
6best practices when using the>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
6 statement>>> num = return_42[] >>> num 42 >>> return_42[] * 2 84 >>> return_42[] + 5 47
Ngoài ra, bạn đã học được một số trường hợp sử dụng nâng cao hơn cho tuyên bố
>>> num = return_42[]
>>> num
42
>>> return_42[] * 2
84
>>> return_42[] + 5
47
6, như cách mã hóa chức năng nhà máy đóng cửa và chức năng trang trí. Với kiến thức này, bạn sẽ có thể viết nhiều chức năng pythonic, mạnh mẽ và có thể duy trì hơn trong Python.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 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: Sử dụng câu lệnh Python Return một cách hiệu quả This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Using the Python return Statement Effectively