簡體   English   中英

python裝飾器和包裝器功能調試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM