[英]Python Function Decorator Puzzle
我最近学习了python装饰器的主题,发现以下两个不同的程序有些奇怪:
范例1:
def deco(func):
def inner():
print("Running inner")
return func
@deco
def target():
print("Running target")
def main():
print("Running main()")
target()
if __name__ == "__main__":
main()
范例2:
def deco(func):
print("Running inner")
return func
@deco
def target():
print("Running target")
def main():
print("Running main()")
target()
if __name__ == "__main__":
main()
运行Example1和Example2时,它将获得2个不同的结果:
Running main()
Running target
在Example1中,以及
Running inner
Running main()
Running target
在Example2中。
似乎Example1中丢失了“ Running内部”。 为什么?
运行示例2将得到该结果,因为在定义时执行了deco
,在该示例中,它立即打印了inner
。
示例1不会打印inner,因为您永远不会对inner
func进行任何操作。 您的装饰师应该返回inner
,而不是func
; inner
本身应该调用func:
def deco(func):
def inner():
print("Running inner")
func()
return inner # note change here
执行此操作时,将得到以下结果:
Running main()
Running inner
Running target
这是您对装饰者的期望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.