python装饰器何时执行?

python装饰器,使用python作为开发的小伙伴一定不会陌生,但是有没有思考过装饰器的执行原理及过程呢?下面我们来分析分析装饰器的特性及执行过程

装饰器有什么特性?
1.能把被装饰的函数替换成其它函数
这个我们经常用到应该都是知道的

2.装饰器在加载模块时立即执行
这个特性注意的不是特别多,我们来说一下这个,先看代码

registry = []


def register(func):
    print('running register({})'.format(func))
    registry.append(func)
    return func


@register
def f1():
    print('running f1')


@register
def f2():
    print('running f2')


def f3():
    print('running f3')

if __name__ == '__main__':
    print('running main')
    print('registry --> {}'.format(registry))
    f1()
    f2()
    f3()

结果:

running register(<function f1 at 0x10b2532f0>)
running register(<function f2 at 0x10b253620>)
running main
registry --> [<function f1 at 0x10b2532f0>, <function f2 at 0x10b253620>]
running f1
running f2
running f3

Process finished with exit code 0

从结果可以看出,装饰器在执行main函数之前就已经运行了,但是被装饰的函数只有在调用时才能运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容