单层装饰器

 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()

上一篇:MybatisPlus最全教程


下一篇:c++98 stl-vector