python之装饰器(函数)

  • 2020 年 1 月 20 日
  • 筆記

1. 装饰器   遵循的原则:

    开闭原则:   对功能的扩展开放  对代码的修改是封闭

# 通用装饰器写法  # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能.    def wrapper(fn): # fn是目标函数      def inner(*args, **kwargs): # 为了目标函数的传参          '''在执行目标函数之前'''          ret = fn(*args, **kwargs) # 调用目标函数, ret是目标函数的返回值          '''在执行目标函数之前'''          return ret # 把目标函数返回值返回, 保证函数正常的结束      return inner  @wrapper  # target_func = wrapper(target_func)  def target_func():      pass  target_func() # 此时执行的是inner

 2. 带参数的装饰器

def wrapper_out(flag): # 装饰器本身的参数      def wrapper(fn): # 目标函数          def inner(*args, **kwargs): # 目标函数需要的参数              if flag == True: # 判断是否需要装饰                  print('问问老板,行情怎么样啊?')                  ret = fn(*args, **kwargs)                  print('骗我!!')                  return ret              else: # 不需要装饰                  ret = fn(*args, **kwargs)                  return ret          return inner      return wrapper    @wrapper_out(True) # 先执行wrapper_out(True) 返回一个装饰器, 再和@拼接 -> @装饰器  # @wrapper_out(False) # 走,开团  def yue(): # 被wrapper装饰      print('走,开团')    yue()

3. 同一个函数被多个装饰器装饰

@wrapper1  @wrapper2  @wrapper3  def func():       pass    # 1  2  3  func 3  2  1