# 裝飾器造成的過程 : 最簡單的裝飾器 有返回值的 有一個參數 萬能參數 # 裝飾器的做用 # 原則 :開放封閉原則 # 語法糖 :@ # 裝飾器的固定模式 #不懂技術 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 #語法糖 @裝飾器函數名 # def func(): #被裝飾的函數 # time.sleep(0.01) # print('老闆好同事好你們好') # return '新年好' # # func = timmer(func) # ret = func() #inner() # print(ret) # 裝飾器的做用 —— 不想修改函數的調用方式 可是還想在原來的函數先後添加功能 # timmer就是一個裝飾器函數,只是對一個函數 有一些裝飾做用 # 原則: 開放封閉原則 # 開放 : 對擴展是開放的 # 封閉 : 對修改是封閉的 # 封版 # def outer(): # def inner(): # return 'inner' # inner() # # outer() #裝飾帶參數函數的裝飾器 # 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) # 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(): # def inner(): # pass # return inner 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 # # 講解元旦做業 擴展裝飾器