python装饰器何时执行?

2017-07-09  本文已影响322人  KillerManA

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函数之前就已经运行了,但是被装饰的函数只有在调用时才能运行。

上一篇 下一篇

猜你喜欢

热点阅读