1. 程式人生 > >《Python學習之路 -- Python基礎之裝飾器》

《Python學習之路 -- Python基礎之裝飾器》

接收 學習之路 代碼 內部 AS OS 如果 col PE

  裝飾器,本質上是一個函數,更加直觀的說,裝飾器就是等於 高階函數 + 函數嵌套 + 閉包 ,裝飾器是具有某個基礎功能的函數,這種功能可以加成到其他函數上,使得其他函數的功能更加強大。除此以外,裝飾器還有兩個重要的特征:1、不改變被修飾函數的調用方式  2、不改變被修飾函數的源碼 ,也就是說,裝飾器就是在這兩個特征上改造其他函數的函數。

高階函數是指函數接收的參數是函數或者函數的返回值是函數,這樣的函數就是高階函數。

函數嵌套就是函數裏面還定義了函數,可以嵌套多層。

函數閉包是指函數內部的函數使用了外部函數的局部變量。

# 外層包裹器,用於接收被修飾的函數
def wrapper(fun):
    
# 內層函數,用於為被修飾的函數添加基本功能 def inner(*args,**kwargs): # 基本功能代碼 # 調用被裝飾的函數,並接收返回值 result = fun(*args,**kwargs) # 將接收的結果返回 return result # 相當於對外暴露內層函數 return inner @wrapper # 等價於:foo = wrapper(foo) def foo(a,b,c=3):print(foo,a,b,c)
   @wrapper
def bar():
print(bar) # 直接調用,沒有改變被修飾函數的調用方式 foo(1,2) bar()

如果包裹器還有需要要傳參數,則可以在包裹器的外面繼續套一層函數

《Python學習之路 -- Python基礎之裝飾器》