楼外青楼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一. 基本概念与定义 


   

  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__}')

 

posted on 2019-05-15 23:53  楼外青楼  阅读(91)  评论(0编辑  收藏  举报