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