Python_裝飾器_29
阿新 • • 發佈:2019-04-07
nbsp 當前 das wrap alt code ash outer turn
# 裝飾器形成的過程 : 最簡單的裝飾器 有返回值的 有一個參數 萬能參數 # 裝飾器的作用 # 原則 :開放封閉原則 # 語法糖 :@ # 裝飾器的固定模式 import time # print(time.time()) # 獲取當前時間 # time.sleep(10) #讓程序在執行到這個位置的時候停一會兒 def timmer(f): start = time.time() f() end = time.time() print(end - start) def func(): time.sleep(0.01) print(大家好!) timmer(func) #fun()
裝飾器:
import time def func(): #被裝飾的函數 time.sleep(0.01) print(‘老板好同事好大家好‘) def timmer(f): # 裝飾器函數 def inner(): start = time.time() ret = f() # 被裝飾的函數 end = time.time() print(end - start)return ret return inner func = timmer(func) func()
接受被裝飾的函數的返回值
import time def timmer(f): #裝飾器函數 def inner(): start = time.time() ret = f() #被裝飾的函數 end = time.time() print(end - start) return ret # 接受被裝飾的函數的返回值 不能直接return f()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()
裝飾帶參數函數的裝飾器
#裝飾帶參數函數的裝飾器 import time 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(a=1,b=2) #inner() ret = func(1,b=2) #inner() ret = func(b=1,a=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
Python_裝飾器_29