[英]python wrapper in wrapper - order of execution confusing?
這是我第一次在這里發布問題,因此,如果我違反任何規則,我深表歉意。 謝謝
我的問題是,為什么python3在以下代碼上打印3 1 2 4而不是3 4 1 2 4? 我的論據是...如果python要打印2 [這意味着從print_one中讀取print_two],為什么python在打印1之前不先打印4?
非常感謝。
def print_one(x):
print(1)
def print_two():
print(2)
return x()
return print_two
def print_three(x):
print(3)
def print_four():
print(4)
return print_four
def major_print():
print("major print")
major_print = print_one(print_three(major_print))
if __name__ == "__main__":
major_print()
這很容易解釋:
裝飾功能后,將立即執行兩個裝飾功能中的第一個print語句。 如果省略函數調用,則會得到輸出
3
1
這是因為內部裝飾器print_three
被調用,而print_one
隨后裝飾該函數。
包裝函數內部的print語句(修改原始函數)在調用該函數時執行。 因為print_four
不使用裝飾器的參數,所以您基本上只用print_two
裝飾它。 因此,相當於最終功能的內容將類似於
def major_print():
print(2)
print(4)
return None
這樣,您將獲得所說的數字序列3124作為控制台輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.