# 裝飾器造成的過程 : 最簡單的裝飾器 有返回值的 有一個參數 萬能參數
# 裝飾器的做用
# 原則 :開放封閉原則
# 語法糖 :@
# 裝飾器的固定模式
import time # # print(time.time()) # 獲取當前時間 # # time.sleep(10) #讓程序在執行到這個位置的時候停一下子 # def timmer(f): #裝飾器函數 # def inner(): # start = time.time() # ret = f() #被裝飾的函數 # end = time.time() # print(end - start) # return ret # return inner # # @timmer #語法糖 @裝飾器函數名 #與func = timmer(func)功能相同 # def func(): #被裝飾的函數 # time.sleep(0.01) # print('老闆好同事好你們好') # return '新年好' # # func = timmer(func) # ret = func() #inner() # print(ret)
# 裝飾器的做用 —— 不想修改函數的調用方式 可是還想在原來的函數先後添加功能
# timmer 就是一個裝飾器函數,只是對一個函數 有一些裝飾做用
# 原則: 開放封閉原則
# 開放 : 對擴展是開放的
# 封閉 : 對修改是封閉的
# 封版
裝飾器造成過程
#裝飾帶參數函數的裝飾器 # def timmer(f): #裝飾器函數 # def inner(*args,**kwargs): #爲應對傳參個數和方式不肯定的狀況 # #(1,2) /(1) # start = time.time() # ret = f(*args,**kwargs) #f(1,2) #被裝飾的函數 # end = time.time() # print(end - start) # return ret # return inner # 有兩個參數的狀況 # @timmer #語法糖 @裝飾器函數名 # def func(a,b): #被裝飾的函數 # time.sleep(0.01) # print('老闆好同事好你們好',a,b) # return '新年好' # 有一個參數的狀況 # @timmer #語法糖 @裝飾器函數名 # def func1(a): #被裝飾的函數 # time.sleep(0.01) # print('老闆好同事好你們好',a) # return '新年好' # # func = timmer(func) # ret = func(1,2) #inner() # ret = func(1,b = 2) #inner() #實參裏有關鍵字傳參時 # print(ret)
裝飾器固定格式app
# def wrapper(f): #裝飾器函數,f是被裝飾的函數 # def inner(*args,**kwargs): # '''在被裝飾函數以前要作的事''' # ret = f(*args,**kwargs) #被裝飾的函數 # '''在被裝飾函數以後要作的事''' # return ret # return inner
示例函數
# def wrapper(f): #裝飾器函數,f是被裝飾的函數 # def inner(*args,**kwargs): # '''在被裝飾函數以前要作的事''' # ret = f(*args,**kwargs) #被裝飾的函數 # '''在被裝飾函數以後要作的事''' # return ret # return inner # # @wrapper #語法糖 @裝飾器函數名 # def func(a,b): #被裝飾的函數 # time.sleep(0.01) # print('老闆好同事好你們好',a,b) # return '新年好'
def wrapper(func): #qqxing def inner(*args,**kwargs): ret = func(*args,**kwargs) #被裝飾的函數 return ret return inner @wrapper #qqxing = wrapper(qqxing) def qqxing(): print(123) ret = qqxing() #inner()
完美的裝飾器spa
# from functools import wraps # def wrapper(f): #裝飾器函數,f是被裝飾的函數 # @wraps(f) # def inner(*args,**kwargs): # '''在被裝飾函數以前要作的事''' # ret = f(*args,**kwargs) #被裝飾的函數 # '''在被裝飾函數以後要作的事''' # return ret # return inner