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