python 装饰器笔记

 

定义:装饰器就是用于拓展原来函数功能的一种函数,在不用更改原函数的代码前提下给函数增加新的功能。其返回值是一个函数。

应用场景:插入日志、性能测试、事务处理、缓存、权限校验等

python 装饰器笔记
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,然后进行赋值。

替换写法如下

python 装饰器笔记
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里的函数是test
View Code

 

参考::

https://www.cnblogs.com/shengulong/p/7456442.html

https://blog.csdn.net/xiangxianghehe/article/details/77170585

 

上一篇:sql语句


下一篇:【题解】CF82D Two out of Three