python全棧脫產第11天
阿新 • • 發佈:2018-08-06
方式 傳參 全棧 int 運行 參數 新功能 一個 dex
裝飾器
定義:器是指具備某一功能的工具,裝飾指的是為被裝飾器對象添加新功能,所以裝飾器就是為被裝飾對象添加新功能的工具
註意:裝飾器本身可以是任意可調用的對象,被裝飾器的對象也可以是任意可調用對象
用處:開放封閉原則:封閉指的是對修改封閉,對擴展開放
遵循兩大原則: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天