python學習之-裝飾器
阿新 • • 發佈:2018-11-19
1. 什麼是裝飾器
裝飾器就是用來為被裝飾的物件新增功能的工具/函式,被裝飾的物件可以是任意可呼叫的物件,裝飾器本身也可以是任意可呼叫的物件
2. 為何要用裝飾器
開放封閉原則:對修改封閉,對擴充套件開放
裝飾器需要遵循的原則:
1. 不能修改被裝飾物件的原始碼
2. 不能修改被裝飾物件的呼叫方式
PS:裝飾器的目標:就是要在遵循原則1和2的前提下,為被裝飾物件新增功能
3. 如何實現裝飾器
import time
def index(): #這是被裝飾物件
time.sleep(1)
print('welcome to index page')
def timmer(func): # func=最原始那個index的記憶體地址 #這個就是裝飾器格式
def wrapper():
start=time.time()
func()
stop=time.time()
print('run time is %s' %(stop - start))
return wrapper
index=timmer(index) #index=wrapper(index的記憶體地址),這兩個index不一樣,前面的是一個新的名稱空間,後面的index做了一個轉換 #這一步就是用來包裝,讓使用者感覺沒有變化但是後臺卻對功能進行了一個升級
index()
PS:為什麼要在巢狀函式的外面再加一層函式,因為如果不加這層函式,則最後包裝呼叫時候無法傳入index整個引數