python裝飾器毫目,使用python作為開發(fā)的小伙伴一定不會陌生蔬啡,但是有沒有思考過裝飾器的執(zhí)行原理及過程呢?下面我們來分析分析裝飾器的特性及執(zhí)行過程
裝飾器有什么特性镀虐?
1.能把被裝飾的函數替換成其它函數
這個我們經常用到應該都是知道的
2.裝飾器在加載模塊時立即執(zhí)行
這個特性注意的不是特別多箱蟆,我們來說一下這個,先看代碼
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
從結果可以看出刮便,裝飾器在執(zhí)行main函數之前就已經運行了空猜,但是被裝飾的函數只有在調用時才能運行。