1 def decorate(func): 2 def wrapper(): 3 print(f'wrapper--->{wrapper}') 4 print('---start---') 5 func() 6 print('---end---') 7 return wrapper 8 9 @decorate 10 def demo(): 11 print('Hello World') 12 13 print(f'demo--->{demo}') 14 demo()
执行结果:
1 demo---><function decorate.<locals>.wrapper at 0x7f5f6081b310> 2 wrapper---><function decorate.<locals>.wrapper at 0x7f5f6081b310> 3 ---start--- 4 Hello World 5 ---end---
运行过程:
1、首先加载1~7行
2、执行第9行,把demo传入func,所以此时func = demo
3、执行第1~7行,把wrapper return出来,赋值给demo,从结果的第1行也能看出来
4、执行13行,已经可以发现demo指向的是wrapper
5、执行14行,此时14行的demo就是wrapper,所以实际运行2~6行,从结果的第2~5行也能看出
def decorate(func):
def wrapper():
print(f'wrapper--->{wrapper}')
print('---start---')
func()
print('---end---')
return wrapper
@decorate
def demo():
print('Hello World')
print(f'demo--->{demo}')
demo()