[英]python decorator and wrapper function debug
我正在通過實驗示例研究裝飾器和包裝器,發現裝飾器的行為我無法理解。
def decorator_function(original_function):
def wrapper_function():
print "wrapper is executed before {}".format(original_function.__name__)
return original_function() # Try it without ()
return wrapper_function
@decorator_function
def display():
print("display function ran!")
當我運行上面的函數時:
In [59]: display()
wrapper is executed before display
display function ran!
但是,當我將打印功能移到包裝器之外時,包裝器似乎根本沒有運行。 (可能已運行,但我看不到證據。)
def decorator_function(original_function):
def wrapper_function():
#print "wrapper is executed before {}".format(original_function.__name__)
return original_function() # Try it without ()
print "wrapper is executed before {}".format(original_function.__name__)
return wrapper_function
@decorator_function
def display():
print("display function ran!")
然后,我不再看到“包裝器在...之前執行過”。 怎么會? 我在這里想念什么?
In [63]: display()
display function ran!
裝飾器在代碼加載時執行,而包裝器在代碼運行時執行 。 如果我將您的第二個示例轉儲到文件example.py
並像這樣運行它:
pythohn -i example.py
我懂了:
wrapper is executed before display
>>>
裝飾器正在運行。 現在,如果我調用display()
,我將看到該函數的輸出:
>>> display()
display function ran!
>>>
我在這里看不到裝飾器的輸出,因為它已經運行了 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.