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