定义:装饰器就是用于拓展原来函数功能的一种函数,在不用更改原函数的代码前提下给函数增加新的功能。其返回值是一个函数。
应用场景:插入日志、性能测试、事务处理、缓存、权限校验等
def dec1(func): print("dec1_1111") def one(): print("dec1_2222") func() print("dec1_3333") return one def dec2(func): print("dec2_aaaa") def two(): print("dec2_bbbb") func() print("dec2_cccc") return two @dec1 @dec2 def test(): print("test test") test() ''' output: dec2_aaaa dec1_1111 dec1_2222 dec2_bbbb test test dec2_cccc dec1_3333 '''View Code
7~20行是装载装饰器的过程,相当于执行了test=dect1(dect2(test)),此时先执行dect2(test),结将func指向函数test、并返回函数two,然后执行dect1(two),将func指向函数two、并返回函数one,然后进行赋值。
替换写法如下
def dec1(two): print("dec1_1111") def one(): print("dec1_2222") two() print("dec1_3333") return one def dec2(test): print("dec2_aaaa") def two(): print("dec2_bbbb") test() print("dec2_cccc") return two # @dec1 # @dec2 ''' 上面的装饰器等价于 test = dec1(dec2(test)) test = dec2(test) test = dec1(test) test() ''' def test(): print("test test") #拆解 test = dec1(dec2(test)) two = dec2(test) #dec2传入的是test,返回的是two one = dec1(two) #dec1传入的是two,返回的是one one() #调用one(),one里的函数是two,two里的函数是testView Code
参考::
https://www.cnblogs.com/shengulong/p/7456442.html
https://blog.csdn.net/xiangxianghehe/article/details/77170585