欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python装饰器

程序员文章站 2022-07-10 13:58:39
...

装饰器的作用

  • 开放封闭原则

软件实体应该是可扩展而不可修改的。即:对扩展是开放的,对修改是封闭的。

  • 装饰器作用

不改变原代码的情况下,拓展新功能

装饰器的实现

  • 方式一:函数(闭包函数)

闭包函数特点:1、函数内部嵌套函数;2、外层函数返回值是内层函数;3、内层嵌套函数对外层有一个非全局变量的应用

# 闭包
def demo(a):
    def fun():
        print(a)
    return fun()


demo('闭包函数')


# 装饰器
def decorator(fn):   # 外层函数的第一个参数类型为函数或类
    def fun():
        print('这是装饰器函数功能')
        fn()
    return fun()


@decorator
def fun2():
    print('这是被装饰函数的原功能')


fun2()    # fun2 = decorator(fun2)
# 装饰器装饰类
def fun_1(fn):                                                      
    def fun_2(*args, **kwargs):                                     
        print('装饰器扩展的新功能')                                          
        return fn(*args, **kwargs) # 装饰器函数装饰类时必须返回创建的对象             
    return fun_2                                                    
                                                                    
                                                                    
@fun_1                                                              
class Test(object):                                                 
    def __init__(self):                                             
        print('这是一个init方法')                                         
                                                                    
                                                                    
t = Test()                                                          
print(t)                                                            
  • 方式二:类(call)

  • 通用装饰器
def fun_1(fn):        
    def fun_2(*args, *
        print('装饰器扩展的新
        fn(*args, **kw
                      
    return fun_2      
                      
                      
@fun_1                
def fun_3(a, b, c):   
    print('a+b+c', a +
                      
                      
fun_3(1, 10, 100)     

装饰器的应用

  • log日志
  • flask框架路由
  • pytest/unittest
  • django权限校验
  • 事物处理
  • 缓存处理
  • 计算函数运行时间和次数