Python基礎【裝飾器】
阿新 • • 發佈:2018-12-14
裝飾器:
裝飾器:用來修改函式功能的函式
- 可以在不改變原函式的基礎上新增功能
實現裝飾器的方法:從函式中返回函式,將原函式作為一個引數傳給另一個函式程式碼:裝飾器pro_print在函式執行前輸出提示"welcome to class"
def pro_print(fun): # 裝飾器函式 def wrapper(*args,**kwargs): # 接收各種型別的不定長引數 print("welcome to class") fun() return wrapper @pro_print # 語法糖,在函式前使用用於裝飾函式 def fun(): print('hello,python') fun()
但裝飾器會覆蓋原有函式的函式名,提示文件等資訊
def pro_print(fun): # 裝飾器函式 def wrapper(*args,**kwargs): # 接收各種型別的不定長引數 '''執行函式前提示welcom to class''' print("welcome to class") fun() return wrapper @pro_print # 語法糖,在函式前使用用於裝飾函式 def fun(): '''輸出hello,python''' print('hello,python') fun() print(fun.__name__) print(fun.__doc__)
測試結果:
匯入functools中的wraps函式可以解決這個問題
from functools import wraps def pro_print(fun): # 裝飾器函式 @wraps(fun) def wrapper(*args,**kwargs): # 接收各種型別的不定長引數 '''執行函式前提示welcom to class''' print("welcome to class") fun() return wrapper @pro_print # 語法糖,在函式前使用用於裝飾函式 def fun(): '''輸出hello,python''' print('hello,python') fun() print(fun.__name__)
測試結果: