Python函数的装饰器

  • 2020 年 1 月 20 日
  • 筆記

函数的装饰器.

1. 装饰器

  开闭原则:

        对功能的扩展开放

        对代码的修改是封闭

    通用装饰器语法:

def wrapper(fn):      def inner(*args, **kwargs): # 聚合          """在目标函数之前的内容"""          ret = fn(*arg, **kwargs) # 打散          """在目标函数之后的内容"""          return ret      return inner  @wrapper  def func():      pass  func()

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

就近原则

def wrapper1(fn):      def inner(*args, **kwargs):          print("1")          ret = fn(*args, **kwargs)          print("2")          return ret      return inner    def wrapper2(fn):      def inner(*args, **kwargs):          print("3")          ret = fn(*args, **kwargs)          print("4")          return ret      return inner    def wrapper3(fn):      def inner(*args, **kwargs):          print("5")          ret = fn(*args, **kwargs)          print("6")          return ret      return inner  # 顺序 1 2 3  func 3 2 1  @wrapper1  @wrapper2  @wrapper3  def func():      print("我是谁,我在哪")  func()  # 1 3 5 我是谁,我在哪 6 4 2

3. 带参数的装饰器

def wrapper_out(参数):          def wrapper(fn):              def inner(*args, **kwargs): # 聚合                  """在目标函数之前的内容"""                  ret = fn(*arg, **kwargs) # 打散                  """在目标函数之后的内容"""                  return ret              return inner          return wrapper  @wrapper_out(实参)  # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖  def func():      pass