Python進階【第九篇】裝飾器
阿新 • • 發佈:2018-04-07
turn spa none app light fun rap log python
什麽是裝飾器
裝飾器本身就是函數,並且為其他函數添加附加功能
裝飾器的原則:1.不修改被裝飾對象的源代碼 2.不修改被裝飾對象的調用方式
裝飾器=高階函數+函數嵌套+閉包
# res=timmer(test) #返回的是wrapper的地址 # res() #執行的是wrapper()
# test=timmer(test) #返回的是wrapper的地址 # test() #執行的是wrapper()
# @timmer 就相當於 test=timmer(test)
# #搭一個高階函數與函數嵌套的框架 # def timmer(func): # def wrapper(): # print(func) # func() # return wrapper import time def timmer(func): def wrapper(): start_time=time.time() # print(func) res=func()#由於執行新獲得的test,所以執行wrapper,func作為局部變量,當前沒有,便往上一層去找,即test,運行test stop_time = time.time() print(‘運行時間是%s‘ %(stop_time -start_time)) #wrapper裏沒有返回值,所以不管怎麽改變test,返回值都是none return res#由於func運行的就是test,所以將func的值賦給res,再返回res就是test的返回值 return wrapper @timmer#相當於test = timmer(test)#把test函數作為參數傳給timmer,執行timmer獲取到返回值wrapper,並將其賦給test def test(): time.sleep(3) print(‘test運行完畢‘) return ‘這是test的返回值‘ test()#執行新的test,實際就是執行wrapper,這是為了不改變test的調用方式
Python進階【第九篇】裝飾器