装饰器

一. 基本概念与定义 


   

  1. 函数的嵌套: 在函数中嵌套一个函数

  2. 闭包: 内部函数调用外部函数作为参数

  3. 装饰器本质: 是一个闭包

  4. 函数的开放封闭原则

    封闭 ----- 对修改是封闭的

    开放------ 对扩展是开放的

二. 应用 


   

  1. 基本装饰器的固定模式:

  def wrapper(f): 
      def inner(*args, **kwargs):  
          pass  
          result = f(*args, **kwargs)  
          pass  
          return result  
  
      return inner  
  
 
 @wrapper   # 等价于 func = wrapper(func) = inner()
 def func():  
     pass  

  2. 定义三阶装饰器: 可一键决定使用或关闭装饰器   

  flag = True  # 打开装饰器
  # flag = False  # 关闭装饰器
  def wrapper_out(flag):
      def wrapper(f): 
          def inner(*args, **kwargs): 
              if flag:  # 当flag为真是使用装饰器
                  pass  
                  result = f(*args, **kwargs)  
                  pass  
                 return result  
             else:  # 当flag为假时关闭装饰器,执行原函数
                 result = f(*args, **kwargs)  
                 return result 
         return inner  
     return wrapper  
 
 @wrapper_out(flag)  # 等价于wrapper = wrapper_out(flag)   func = wrapper(func)
 def func(): 
     pass

   3. 多个装饰器装饰一个函数(俄罗斯套娃)

def wrapper1(f):

    def inner(*args, **kwargs):
        print('wrapper1前')
        result = f(*args, **kwargs)
        print('wrapper1后')
        return result
    return inner


def wrapper2(f):
    def inner(*args, **kwargs):
        print('wrapper2前')
        result = f(*args, **kwargs)
        print('wrapper2后')
        return result
    return inner


@wrapper1
@wrapper2
def func():  
    print(f'主函数: {func.__name__}')
原文地址:https://www.cnblogs.com/scy645670291/p/10872988.html