python裝飾器,使用python作為開(kāi)發(fā)的小伙伴一定不會(huì)陌生,但是有沒(méi)有思考過(guò)裝飾器的執(zhí)行原理及過(guò)程呢?下面我們來(lái)分析分析裝飾器的特性及執(zhí)行過(guò)程
裝飾器有什么特性?
1.能把被裝飾的函數(shù)替換成其它函數(shù)
這個(gè)我們經(jīng)常用到應(yīng)該都是知道的
2.裝飾器在加載模塊時(shí)立即執(zhí)行
這個(gè)特性注意的不是特別多,我們來(lái)說(shuō)一下這個(gè),先看代碼
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()
結(jié)果:
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
從結(jié)果可以看出,裝飾器在執(zhí)行main函數(shù)之前就已經(jīng)運(yùn)行了,但是被裝飾的函數(shù)只有在調(diào)用時(shí)才能運(yùn)行。