1. 程式人生 > >python學習之-裝飾器

python學習之-裝飾器

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整個引數