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