最近我研究了python装饰师的主题,并为下面两个不同的程序发现了一些奇怪的东西:
Example1:
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()Example2:
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时,将得到两个不同的结果:
Running main()
Running target在Example1中,以及
Running inner
Running main()
Running target在Example2中。
似乎“内部运行”在Example1中丢失了。为什么?
发布于 2016-07-03 15:20:43
运行示例2将给出结果,因为deco是在定义时执行的,并且在该示例中它会立即打印inner。
示例1不会在内部打印,因为您从不使用inner函数进行任何操作。您的装饰器应该返回inner,而不是func;inner本身应该调用func:
def deco(func):
def inner():
print("Running inner")
func()
return inner # note change here当您这样做时,您将得到以下结果:
Running main()
Running inner
Running target这就是你对装饰师的期望。
https://stackoverflow.com/questions/38171311
复制相似问题