標籤:解譯器 out 開放封閉原則 pre 修改 就是 函數名 pytho turn
裝飾器
定義:器是指具備某一功能的工具,裝飾指的是為被裝飾器對象添加新功能,所以裝飾器就是為被裝飾對象添加新功能的工具
注意:裝飾器本身可以是任意可調用的對象,被裝飾器的對象也可以是任意可調用對象
用處:開放封閉原則:封閉指的是對修改封閉,對擴充開放
遵循兩大原則:1.不修改被裝飾對象的原始碼
2.不修改被裝飾對象的調用方式
目標:在遵循兩大原則的前提下為被裝飾對象添加上新功能
用法:
def foo(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
裝飾器的文法糖:在被裝飾對象正上方單獨一行寫@裝飾器的名字
原理:python解譯器一旦運行到@裝飾器的名字,就會調用裝飾器,然後將被裝飾函數的地址當做參數傳給裝飾器,最後將裝飾器啟動並執行結果賦值給原函數名
def foo(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
@foo()
def index():
print(xxx)
index()
疊加多個裝飾:解釋@文法的時候是自下而上,執行裝飾器內的函數是自上而下
有參裝飾器:需要在裝飾器外面再套一個函數用於傳參
def outter1(x,y,z):
def outter2(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
return outter2
wraps裝飾器:匯入wraps模組,應加在裝飾器最內層的函數上,@wraps(func),用於將裝飾器內函數偽裝成和被裝飾對象一樣
python全棧脫產第11天