python之路(7)裝飾器
阿新 • • 發佈:2018-11-11
前言
裝飾器:為函式新增附屬功能,本質為函式
原則:不修改被修飾函式的原始碼
不修改被修飾函式的呼叫方式
裝飾器=高階函式+函式巢狀+閉包
使用場景演示
定義下面函式
def cal(l): res = 0 for i in l: time.sleep(0.1) res+=1return res
想要實現檢測函式的執行時間
import time def cal(l): start_time = time.time() res = 0 for i inl: time.sleep(0.1) res+=1 stop_time = time.time() print("函式的執行時間%s" %(stop_time-start_time)) return res
以上函式雖然完美的實現了測量時間,但是違反了開放封閉原則,修改了函式中的程式碼,我們應該在不改變函式程式碼的前提下加入檢測時間的功能,由此應該引入裝飾器的概念
import time def timer(func): def wrappper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) # --> (不修改修飾函式的原始碼) stop_time=time.time() print('函式執行的時間%s' %(stop_time-start_time)) return res return wrappper 注:其上就是裝飾器
@timer #做了將cal函式名作為引數傳給了timer函式,並返回賦值給cal cal = timer(cal) --> (不修改修飾函式的呼叫方式) def cal(l): res= 0 for i in l: time.sleep(0.1) res+=1 return res
cal(range(10))#這裡的cal,呼叫的其實是裝飾器裡的wrapper內嵌函式