Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Trong hình bên dưới. Lệnh gọi hàm được thực hiện từ Hàm chính đến Hàm 1, Bây giờ trạng thái của Hàm chính được lưu trữ trong Ngăn xếp và việc thực thi Hàm chính được tiếp tục khi Hàm 1 trả về. Fucntion1 gọi Function2 bây giờ Trạng thái của Function1 được lưu trữ ngăn xếp và việc thực thi Chức năng 1 sẽ được tiếp tục khi Chức năng 2 trở lại.  

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Xem xét ví dụ dưới đây về lệnh gọi hàm. Hàm SumOfSquares gọi Hàm Square trả về bình phương của số.  

Python3




Function2 :  Hello
Function1 :  World
18

Function2 :  Hello
Function1 :  World
19

 

Function2 :  Hello
Function1 :  World
20
Function2 :  Hello
Function1 :  World
21

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
23

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
0

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
2
Function2 :  Hello
Function1 :  World
3
Function2 :  Hello
Function1 :  World
4
Function2 :  Hello
Function1 :  World
5

 

Function2 :  Hello
Function1 :  World
20
Function2 :  Hello
Function1 :  World
7

 

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
9

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
1

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
3
Function2 :  Hello
Function1 :  World
4
Function2 :  Hello
Function1 :  World
5

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
7
Function2 :  Hello
Function1 :  World
8
Function2 :  Hello
Function1 :  World
9
Function2 :  Hello
Function1 :  World
180
Function2 :  Hello
Function1 :  World
181

 

Function2 :  Hello
Function1 :  World
182
Function2 :  Hello
Function1 :  World
183

Function2 :  Hello
Function1 :  World
182
Function2 :  Hello
Function1 :  World
185
Function2 :  Hello
Function1 :  World
4
Function2 :  Hello
Function1 :  World
187

 

Function2 :  Hello
Function1 :  World
182
Function2 :  Hello
Function1 :  World
189

Function2 :  Hello
Function1 :  World
182
Function2 :  Hello
Function1 :  World
3
Function2 :  Hello
Function1 :  World
192
Function2 :  Hello
Function1 :  World
4
Function2 :  Hello
Function1 :  World
185

Function2 :  Hello
Function1 :  World
22
Function2 :  Hello
Function1 :  World
2
Function2 :  Hello
Function1 :  World
3

 

Function2 :  Hello
Function1 :  World
198

Function2 :  Hello
Function1 :  World
199
Function2 :  Hello
Function1 :  World
4
Function2 :  Hello
Function1 :  World
201
Function2 :  Hello
Function1 :  World
202
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
204
Function2 :  Hello
Function1 :  World
206
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
208
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
210
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
212
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
214
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
216
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
218
Function2 :  Hello
Function1 :  World
203
Function2 :  Hello
Function1 :  World
221

Các hàm bên trong, còn được gọi là các hàm lồng nhau, là các hàm mà bạn xác định bên trong các hàm khác. Trong Python, loại hàm này có quyền truy cập trực tiếp vào các biến và tên được xác định trong hàm kèm theo. Các hàm bên trong có nhiều công dụng, đáng chú ý nhất là các hàm đóng và hàm trang trí

Trong hướng dẫn này, bạn sẽ học cách

  • Cung cấp khả năng đóng gói và ẩn các chức năng của bạn khỏi sự truy cập từ bên ngoài
  • Viết các hàm trợ giúp để tạo điều kiện sử dụng lại mã
  • Tạo các chức năng nhà máy đóng cửa giữ nguyên trạng thái giữa các cuộc gọi
  • Các chức năng trang trí mã để thêm hành vi vào các chức năng hiện có

Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến ​​thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python

Tạo các hàm bên trong Python

Một hàm được xác định bên trong một hàm khác được gọi là hàm bên trong hoặc hàm lồng nhau. Trong Python, loại chức năng này có thể truy cập tên trong chức năng kèm theo. Đây là một ví dụ về cách tạo một hàm bên trong trong Python

>>>

Function2 :  Hello
Function1 :  World
0

Trong mã này, bạn xác định

Function2 :  Hello
Function1 :  World
16 bên trong
Function2 :  Hello
Function1 :  World
17 để in thông báo
Function2 :  Hello
Function1 :  World
18 ra màn hình. Để làm điều đó, bạn gọi
Function2 :  Hello
Function1 :  World
16 ở dòng cuối cùng của
Function2 :  Hello
Function1 :  World
17. Đây là cách nhanh nhất để viết một hàm bên trong Python. Tuy nhiên, các chức năng bên trong cung cấp rất nhiều khả năng thú vị ngoài những gì bạn thấy trong ví dụ này

Tính năng cốt lõi của các hàm bên trong là khả năng truy cập các biến và đối tượng từ hàm kèm theo của chúng ngay cả sau khi hàm này đã trả về. Hàm kèm theo cung cấp một không gian tên mà hàm bên trong có thể truy cập được

>>>

Function2 :  Hello
Function1 :  World
1

Bây giờ bạn có thể chuyển một chuỗi làm đối số cho

Function2 :  Hello
Function1 :  World
17 và
Function2 :  Hello
Function1 :  World
16 sẽ truy cập đối số đó thông qua tên
Function2 :  Hello
Function1 :  World
93. Tuy nhiên, tên này được xác định trong phạm vi cục bộ của
Function2 :  Hello
Function1 :  World
17. Các tên mà bạn xác định trong phạm vi cục bộ của hàm bên ngoài được gọi là tên không cục bộ. Chúng không mang tính địa phương theo quan điểm của
Function2 :  Hello
Function1 :  World
16

Đây là một ví dụ về cách tạo và sử dụng một hàm bên trong phức tạp hơn

>>>

Function2 :  Hello
Function1 :  World
9

Trong

Function2 :  Hello
Function1 :  World
96, trước tiên bạn xác thực dữ liệu đầu vào để đảm bảo rằng người dùng của bạn đang cung cấp một số nguyên bằng hoặc lớn hơn 0. Sau đó, bạn định nghĩa một hàm bên trong đệ quy có tên là
Function2 :  Hello
Function1 :  World
97 để thực hiện phép tính giai thừa và trả về kết quả. Bước cuối cùng là gọi
Function2 :  Hello
Function1 :  World
97

Ghi chú. Để thảo luận chi tiết hơn về đệ quy và các hàm đệ quy, hãy xem Tư duy đệ quy trong Python và Đệ quy trong Python. Một lời giới thiệu

Ưu điểm chính của việc sử dụng mẫu này là, bằng cách thực hiện tất cả việc kiểm tra đối số trong hàm bên ngoài, bạn có thể bỏ qua việc kiểm tra lỗi trong hàm bên trong một cách an toàn và tập trung vào việc tính toán trong tầm tay

Loại bỏ các quảng cáo

Sử dụng các chức năng bên trong. Những thứ cơ bản

Các trường hợp sử dụng hàm bên trong Python rất đa dạng. Bạn có thể sử dụng chúng để cung cấp khả năng đóng gói và ẩn các hàm của mình khỏi sự truy cập từ bên ngoài, bạn có thể viết các hàm bên trong của trình trợ giúp và bạn cũng có thể tạo các bao đóng và trình trang trí. Trong phần này, bạn sẽ tìm hiểu về hai trường hợp sử dụng trước đây của các hàm bên trong và trong các phần sau, bạn sẽ tìm hiểu cách tạo các hàm đóng và trình trang trí

Cung cấp đóng gói

Một trường hợp sử dụng phổ biến của các hàm bên trong phát sinh khi bạn cần bảo vệ hoặc ẩn một hàm nhất định khỏi mọi thứ xảy ra bên ngoài nó để hàm đó hoàn toàn bị ẩn khỏi phạm vi toàn cầu. Loại hành vi này thường được gọi là đóng gói

Đây là một ví dụ làm nổi bật khái niệm đó

>>>

Function2 :  Hello
Function1 :  World
6

Trong ví dụ này, bạn không thể truy cập trực tiếp vào

Function2 :  Hello
Function1 :  World
99. Nếu bạn cố gắng làm điều đó, thì bạn sẽ nhận được một
Function2 :  Hello
Function1 :  World
60. Đó là bởi vì
Function2 :  Hello
Function1 :  World
61 ẩn hoàn toàn
Function2 :  Hello
Function1 :  World
99, ngăn bạn truy cập nó từ phạm vi toàn cầu

Xây dựng chức năng bên trong Helper

Đôi khi, bạn có một hàm thực hiện cùng một đoạn mã ở một số vị trí trong nội dung của nó. Ví dụ: giả sử bạn muốn viết một hàm để xử lý tệp CSV chứa thông tin về các điểm truy cập Wi-Fi ở Thành phố New York. Để tìm tổng số điểm phát sóng ở New York cũng như công ty cung cấp hầu hết các điểm phát sóng này, bạn tạo tập lệnh sau

Function2 :  Hello
Function1 :  World
1

Ở đây,

Function2 :  Hello
Function1 :  World
63 lấy
Function2 :  Hello
Function1 :  World
64 làm đối số. Hàm kiểm tra xem
Function2 :  Hello
Function1 :  World
64 có phải là đường dẫn dựa trên chuỗi tới tệp vật lý hoặc đối tượng tệp không. Sau đó, nó gọi hàm bên trong của trình trợ giúp
Function2 :  Hello
Function1 :  World
66, hàm này nhận một đối tượng tệp và thực hiện các thao tác sau

  1. Đọc nội dung tệp vào trình tạo tạo từ điển bằng cách sử dụng
    Function2 :  Hello
    Function1 :  World
    67
  2. Tạo danh sách các nhà cung cấp Wi-Fi
  3. Đếm số lượng điểm truy cập Wi-Fi trên mỗi nhà cung cấp bằng đối tượng
    Function2 :  Hello
    Function1 :  World
    68
  4. In một tin nhắn với thông tin được truy xuất

Nếu bạn chạy chức năng, thì bạn sẽ nhận được đầu ra sau

>>>

Function2 :  Hello
Function1 :  World
8

Cho dù bạn gọi

Function2 :  Hello
Function1 :  World
63 bằng đường dẫn tệp dựa trên chuỗi hay bằng đối tượng tệp, bạn đều nhận được kết quả như nhau

Sử dụng các chức năng trợ giúp bên trong và riêng tư

Thông thường, bạn tạo các hàm bên trong của trình trợ giúp như

Function2 :  Hello
Function1 :  World
66 khi bạn muốn cung cấp khả năng đóng gói. Bạn cũng có thể tạo các hàm bên trong nếu bạn nghĩ rằng mình sẽ không gọi chúng ở bất kỳ nơi nào khác ngoài hàm chứa

Mặc dù việc viết các hàm trợ giúp của bạn dưới dạng các hàm bên trong đạt được kết quả mong muốn, nhưng có lẽ bạn sẽ được phục vụ tốt hơn bằng cách trích xuất chúng dưới dạng các hàm cấp cao nhất. Trong trường hợp này, bạn có thể sử dụng dấu gạch dưới ở đầu (

Function2 :  Hello
Function1 :  World
11) trong tên của hàm để cho biết rằng nó là riêng tư đối với mô-đun hoặc lớp hiện tại. Điều này sẽ cho phép bạn truy cập các chức năng của trình trợ giúp từ bất kỳ nơi nào khác trong mô-đun hoặc lớp hiện tại và sử dụng lại chúng khi cần

Trích xuất các chức năng bên trong thành các chức năng riêng cấp cao nhất có thể làm cho mã của bạn sạch hơn và dễ đọc hơn. Thực tiễn này có thể tạo ra các chức năng do đó áp dụng nguyên tắc chịu trách nhiệm duy nhất

Giữ lại trạng thái với các chức năng bên trong. đóng cửa

Trong Python, các hàm là công dân hạng nhất. Điều này có nghĩa là chúng ngang bằng với bất kỳ đối tượng nào khác, chẳng hạn như số, chuỗi, danh sách, bộ dữ liệu, mô-đun, v.v. Bạn có thể tự động tạo hoặc hủy chúng, lưu trữ chúng trong cấu trúc dữ liệu, chuyển chúng làm đối số cho các hàm khác, sử dụng chúng làm giá trị trả về, v.v.

Bạn cũng có thể tạo các hàm bậc cao hơn trong Python. Các hàm bậc cao hơn là các hàm hoạt động trên các hàm khác bằng cách lấy chúng làm đối số, trả về chúng hoặc cả hai

Tất cả các ví dụ về các hàm bên trong mà bạn đã thấy cho đến nay đều là các hàm thông thường được lồng bên trong các hàm khác. Trừ khi bạn cần ẩn các chức năng của mình với thế giới bên ngoài, không có lý do cụ thể nào để chúng được lồng vào nhau. Bạn có thể xác định các chức năng đó là các chức năng cấp cao nhất riêng tư và bạn nên sử dụng

Trong phần này, bạn sẽ tìm hiểu về các chức năng của nhà máy đóng cửa. Bao đóng là các hàm được tạo động được trả về bởi các hàm khác. Tính năng chính của chúng là chúng có toàn quyền truy cập vào các biến và tên được xác định trong không gian tên cục bộ nơi đóng được tạo, mặc dù hàm kèm theo đã trả về và thực thi xong

Trong Python, khi bạn trả về một đối tượng hàm bên trong, trình thông dịch sẽ đóng gói hàm cùng với môi trường chứa hoặc bao đóng của nó. Đối tượng hàm giữ một ảnh chụp nhanh của tất cả các biến và tên được xác định trong phạm vi chứa của nó. Để xác định thời điểm đóng cửa, bạn cần thực hiện ba bước

  1. Tạo một chức năng bên trong
  2. Các biến tham chiếu từ hàm kèm theo
  3. Trả về hàm bên trong

Với kiến ​​thức cơ bản này, bạn có thể bắt đầu tạo các bao đóng của mình ngay lập tức và tận dụng tính năng chính của chúng. giữ lại trạng thái giữa các lần gọi hàm

Loại bỏ các quảng cáo

Trạng thái giữ lại trong trạng thái đóng

Một bao đóng làm cho hàm bên trong giữ nguyên trạng thái của môi trường khi được gọi. Việc đóng cửa không phải là chức năng bên trong mà là chức năng bên trong cùng với môi trường kèm theo của nó. Bao đóng nắm bắt các biến cục bộ và tên trong hàm chứa và giữ chúng xung quanh

Xem xét ví dụ sau

Function2 :  Hello
Function1 :  World
2

Đây là những gì đang xảy ra trong chức năng này

  • Dòng 3 tạo
    Function2 :  Hello
    Function1 :  World
    12, đây là hàm đóng của nhà máy. Điều này có nghĩa là nó tạo một bao đóng mới mỗi khi nó được gọi và sau đó trả lại cho người gọi
  • Dòng 4 định nghĩa
    Function2 :  Hello
    Function1 :  World
    13, là một hàm bên trong nhận một đối số duy nhất,
    Function2 :  Hello
    Function1 :  World
    14 và trả về kết quả của biểu thức
    Function2 :  Hello
    Function1 :  World
    15
  • Dòng 6 trả về
    Function2 :  Hello
    Function1 :  World
    16 dưới dạng đối tượng hàm mà không gọi nó

Function2 :  Hello
Function1 :  World
13 lấy giá trị của
Function2 :  Hello
Function1 :  World
18 từ đâu? . Trong ví dụ này,
Function2 :  Hello
Function1 :  World
13 nhận giá trị của
Function2 :  Hello
Function1 :  World
18 từ hàm bên ngoài,
Function2 :  Hello
Function1 :  World
12. Đây là những gì Python làm khi bạn gọi
Function2 :  Hello
Function1 :  World
12

  1. Xác định một phiên bản mới của
    Function2 :  Hello
    Function1 :  World
    13, lấy một đối số duy nhất là
    Function2 :  Hello
    Function1 :  World
    14
  2. Chụp nhanh trạng thái xung quanh của
    Function2 :  Hello
    Function1 :  World
    13, bao gồm
    Function2 :  Hello
    Function1 :  World
    18 với giá trị hiện tại của nó
  3. Trả lại
    Function2 :  Hello
    Function1 :  World
    13 cùng với toàn bộ trạng thái xung quanh của nó

Bằng cách này, khi bạn gọi phiên bản của

Function2 :  Hello
Function1 :  World
13 được trả về bởi
Function2 :  Hello
Function1 :  World
12, bạn sẽ thấy rằng hàm ghi nhớ giá trị của
Function2 :  Hello
Function1 :  World
18

>>>

Function2 :  Hello
Function1 :  World
2

Trong những ví dụ này,

Function2 :  Hello
Function1 :  World
21 nhớ rằng
Function2 :  Hello
Function1 :  World
22 và
Function2 :  Hello
Function1 :  World
23 nhớ rằng
Function2 :  Hello
Function1 :  World
24. Lưu ý rằng cả hai lần đóng đều nhớ
Function2 :  Hello
Function1 :  World
18 tương ứng của chúng giữa các cuộc gọi

Bây giờ hãy xem xét một ví dụ khác

>>>

Function2 :  Hello
Function1 :  World
8

Hàm bên trong kiểm tra xem một người dùng nhất định có quyền chính xác để truy cập một trang nhất định hay không. Bạn có thể nhanh chóng sửa đổi điều này để lấy người dùng trong phiên để kiểm tra xem họ có thông tin đăng nhập chính xác để truy cập vào một tuyến đường nhất định hay không

Thay vì kiểm tra xem người dùng có bằng

Function2 :  Hello
Function1 :  World
26 hay không, bạn có thể truy vấn cơ sở dữ liệu SQL để kiểm tra quyền và sau đó trả về chế độ xem chính xác tùy thuộc vào thông tin đăng nhập có chính xác hay không

Thông thường, bạn sẽ tạo các bao đóng không sửa đổi trạng thái bao quanh của chúng hoặc các bao đóng có trạng thái bao quanh tĩnh, như bạn đã thấy trong các ví dụ trên. Tuy nhiên, bạn cũng có thể tạo các bao đóng để sửa đổi trạng thái bao quanh của chúng bằng cách sử dụng các đối tượng có thể thay đổi, chẳng hạn như từ điển, bộ hoặc danh sách

Giả sử bạn cần tính giá trị trung bình của một tập dữ liệu. Dữ liệu đến trong một luồng các phép đo liên tiếp của tham số được phân tích và bạn cần chức năng của mình để giữ lại các phép đo trước đó giữa các lần gọi. Trong trường hợp này, bạn có thể mã hóa chức năng đóng của nhà máy như thế này

>>>

Function2 :  Hello
Function1 :  World
0

Việc đóng được gán cho

Function2 :  Hello
Function1 :  World
27 giữ lại trạng thái của
Function2 :  Hello
Function1 :  World
28 giữa các lần gọi liên tiếp. Mặc dù bạn định nghĩa
Function2 :  Hello
Function1 :  World
28 trong
Function2 :  Hello
Function1 :  World
20, nhưng nó vẫn có sẵn trong phần đóng, vì vậy bạn có thể sửa đổi nó. Trong trường hợp này,
Function2 :  Hello
Function1 :  World
28 hoạt động như một loại trạng thái bao quanh động

Sửa đổi trạng thái đóng cửa

Thông thường, các biến đóng hoàn toàn bị ẩn khỏi thế giới bên ngoài. Tuy nhiên, bạn có thể cung cấp các hàm bên trong getter và setter cho chúng

>>>

Function2 :  Hello
Function1 :  World
10

Ở đây,

Function2 :  Hello
Function1 :  World
22 trả về một bao đóng đại diện cho một đối tượng
Function2 :  Hello
Function1 :  World
23. Đối tượng này có đính kèm các hàm getter và setter. Bạn có thể sử dụng các hàm đó để có quyền truy cập đọc và ghi vào các biến
Function2 :  Hello
Function1 :  World
24 và
Function2 :  Hello
Function1 :  World
25, được xác định trong phạm vi kèm theo và vận chuyển cùng với bao đóng

Mặc dù hàm này tạo các bao đóng có thể hoạt động nhanh hơn một lớp tương đương, nhưng bạn cần lưu ý rằng kỹ thuật này không cung cấp các tính năng chính, bao gồm tính kế thừa, thuộc tính, bộ mô tả, lớp và phương thức tĩnh. Nếu bạn muốn tìm hiểu sâu hơn về kỹ thuật này, hãy xem Công cụ đơn giản để mô phỏng các lớp bằng cách sử dụng bao đóng và phạm vi lồng nhau (Công thức Python)

Loại bỏ các quảng cáo

Thêm hành vi với các chức năng bên trong. người trang trí

Trình trang trí Python là một trường hợp sử dụng phổ biến và thuận tiện khác cho các chức năng bên trong, đặc biệt là cho các bao đóng. Trình trang trí là các hàm bậc cao lấy một đối số có thể gọi được (hàm, phương thức, lớp) và trả về một hàm có thể gọi khác

Bạn có thể sử dụng các hàm trang trí để thêm trách nhiệm vào một khả năng gọi được hiện có một cách linh hoạt và mở rộng hành vi của nó một cách minh bạch mà không ảnh hưởng hoặc sửa đổi khả năng gọi ban đầu

Ghi chú. Để biết thêm chi tiết về các đối tượng có thể gọi được trong Python, hãy xem Hệ thống phân cấp loại tiêu chuẩn trong tài liệu Python và cuộn xuống phần “Các loại có thể gọi được. ”

Để tạo một trình trang trí, bạn chỉ cần xác định một hàm có thể gọi được (một hàm, phương thức hoặc lớp) chấp nhận một đối tượng hàm làm đối số, xử lý nó và trả về một đối tượng hàm khác với hành vi được thêm vào

Khi bạn đã có chức năng trang trí của mình, bạn có thể áp dụng nó cho bất kỳ chức năng có thể gọi nào. Để làm như vậy, bạn cần sử dụng ký hiệu at (

Function2 :  Hello
Function1 :  World
26) trước tên người trang trí và sau đó đặt nó trên dòng riêng của nó ngay trước tên có thể gọi được trang trí

Function2 :  Hello
Function1 :  World
11

Cú pháp này làm cho

Function2 :  Hello
Function1 :  World
27 tự động lấy
Function2 :  Hello
Function1 :  World
28 làm đối số và xử lý nó trong phần thân của nó. Hoạt động này là một tốc ký cho nhiệm vụ sau đây

Function2 :  Hello
Function1 :  World
12

Đây là một ví dụ về cách xây dựng chức năng trang trí để thêm chức năng mới vào chức năng hiện có

>>>

Function2 :  Hello
Function1 :  World
13

Trong trường hợp này, bạn sử dụng

Function2 :  Hello
Function1 :  World
29 để trang trí cho
Function2 :  Hello
Function1 :  World
80. Điều này thêm chức năng mới cho chức năng trang trí. Bây giờ khi bạn gọi
Function2 :  Hello
Function1 :  World
80, thay vì chỉ in ra
Function2 :  Hello
Function1 :  World
18, hàm của bạn in ra hai thông báo mới

Các trường hợp sử dụng cho trình trang trí Python rất đa dạng. Dưới đây là một số trong số họ

  • gỡ lỗi
  • Bộ nhớ đệm
  • ghi nhật ký
  • thời gian

Một phương pháp phổ biến để gỡ lỗi mã Python là chèn lệnh gọi tới

Function2 :  Hello
Function1 :  World
83 để kiểm tra giá trị của các biến, để xác nhận rằng một khối mã được thực thi, v.v. Việc thêm và xóa các lệnh gọi tới
Function2 :  Hello
Function1 :  World
83 có thể gây khó chịu và bạn có nguy cơ quên một số lệnh gọi đó. Để ngăn chặn tình trạng này, bạn có thể viết một trình trang trí như thế này

>>>

Function2 :  Hello
Function1 :  World
14

Ví dụ này cung cấp

Function2 :  Hello
Function1 :  World
85, là một trình trang trí lấy một hàm làm đối số và in chữ ký của nó với giá trị hiện tại của mỗi đối số và giá trị trả về tương ứng của nó. Bạn có thể sử dụng trình trang trí này để gỡ lỗi các chức năng của mình. Khi bạn nhận được kết quả mong muốn, bạn có thể xóa cuộc gọi trang trí
Function2 :  Hello
Function1 :  World
86 và chức năng của bạn sẽ sẵn sàng cho bước tiếp theo

Ghi chú. Nếu bạn muốn tìm hiểu sâu hơn về cách thức hoạt động của

Function2 :  Hello
Function1 :  World
87 và
Function2 :  Hello
Function1 :  World
88 trong Python, thì hãy xem Python args và kwargs. làm sáng tỏ

Đây là một ví dụ cuối cùng về cách tạo một trang trí. Lần này, bạn sẽ triển khai lại

Function2 :  Hello
Function1 :  World
12 như một chức năng trang trí

>>>

Function2 :  Hello
Function1 :  World
15

Phiên bản

Function2 :  Hello
Function1 :  World
12 này tạo ra kết quả giống như bạn nhận được trong quá trình triển khai ban đầu. Trong trường hợp này, bạn sử dụng cả bao đóng để ghi nhớ
Function2 :  Hello
Function1 :  World
18 và trang trí trả về phiên bản đã sửa đổi của hàm đầu vào,
Function2 :  Hello
Function1 :  World
02

Ở đây, trình trang trí cần lấy một đối số (

Function2 :  Hello
Function1 :  World
18), vì vậy bạn cần có hai cấp hàm bên trong lồng nhau. Cấp độ đầu tiên được đại diện bởi
Function2 :  Hello
Function1 :  World
13, lấy chức năng được trang trí làm đối số. Cấp độ thứ hai được đại diện bởi
Function2 :  Hello
Function1 :  World
05, gói đối số
Function2 :  Hello
Function1 :  World
18 trong
Function2 :  Hello
Function1 :  World
07, thực hiện phép tính cuối cùng của công suất và trả về kết quả

Loại bỏ các quảng cáo

Sự kết luận

Nếu bạn định nghĩa một hàm bên trong một hàm khác, thì bạn đang tạo một hàm bên trong, còn được gọi là hàm lồng nhau. Trong Python, các hàm bên trong có quyền truy cập trực tiếp vào các biến và tên mà bạn xác định trong hàm kèm theo. Điều này cung cấp một cơ chế để bạn tạo các hàm trợ giúp, bao đóng và trang trí

Trong hướng dẫn này, bạn đã học cách

  • Cung cấp khả năng đóng gói bằng cách lồng các chức năng vào các chức năng khác
  • Viết các hàm trợ giúp để sử dụng lại các đoạn mã
  • Thực hiện các hàm đóng của nhà máy giữ trạng thái giữa các cuộc gọi
  • Xây dựng các chức năng trang trí để cung cấp các chức năng mới

Bây giờ bạn đã sẵn sàng để tận dụng nhiều cách sử dụng các hàm bên trong trong mã của riêng bạn. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, thì hãy nhớ chia sẻ trong phần bình luận bên dưới

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Hàm bên trong Python

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Leodanis Pozo Ramos

Làm thế nào để bạn in một biến từ một chức năng khác trong python?
Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác

» Tìm hiểu thêm về Leodanis


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Aldren

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Derrick

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Geir Arne

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Jim

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Joanna

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Gia-cốp

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Michael

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Làm thế nào để bạn in một biến từ một chức năng khác trong python?

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi