1. 程式人生 > >python之路(7)裝飾器

python之路(7)裝飾器

 前言

  裝飾器:為函式新增附屬功能,本質為函式

  原則:不修改被修飾函式的原始碼

      不修改被修飾函式的呼叫方式

  裝飾器=高階函式+函式巢狀+閉包


使用場景演示

  定義下面函式

def cal(l):
    res = 0
    for i in l:
        time.sleep(0.1)
        res+=1return res

  想要實現檢測函式的執行時間

import time
def cal(l):
    start_time = time.time()
    res = 0
    for i in
l: time.sleep(0.1) res+=1 stop_time = time.time() print("函式的執行時間%s" %(stop_time-start_time)) return res

  以上函式雖然完美的實現了測量時間,但是違反了開放封閉原則,修改了函式中的程式碼,我們應該在不改變函式程式碼的前提下加入檢測時間的功能,由此應該引入裝飾器的概念

 

import time
def timer(func):
    def wrappper(*args,**kwargs):
        start_time
=time.time() res=func(*args,**kwargs) # --> (不修改修飾函式的原始碼) stop_time=time.time() print('函式執行的時間%s' %(stop_time-start_time)) return res return wrappper 注:其上就是裝飾器
@timer #做了將cal函式名作為引數傳給了timer函式,並返回賦值給cal cal = timer(cal) --> (不修改修飾函式的呼叫方式)
def cal(l): res
= 0 for i in l: time.sleep(0.1) res+=1 return res

cal(range(10))#這裡的cal,呼叫的其實是裝飾器裡的wrapper內嵌函式