裝飾器:本質就是函式,功能是為其他函式新增附加功能
原則:1.不修改被修飾函式的源**
2.不修改被修飾函式的呼叫方式
裝飾器的知識儲備
裝飾器 = 高階函式 + 函式呼叫 + 閉包
例:原函式:
def test():
time.sleep(3)
print('測試完成')
test()
#測試完成
目標:
不改變原函式**和呼叫方式的情況下,在結果處加上程式執行的時間。
構建裝飾器:
def dec(func):
def dec_1():
start_time = time.time()
res = func()
stop_time = time.time()
print('程式執行時間%s' %(stop_time-start_time))
return res
return dec_1
此時我們只需要 dec(test) 就可以得到test函式的記憶體位址,然後執行即可
import time
def dec(func):
def dec_1():
start_time = time.time()
res = func()
stop_time = time.time()
print('程式執行時間%s' %(stop_time-start_time))
return res
return dec_1
def test():
time.sleep(3)
print('測試完成')
test = dec(test)
test() #這裡將dec(test)賦值給test,然後test() 是為了不改變原函式的呼叫方式
#測試完成
#程式執行時間3.0002593994140625
這裡我們不難發現,如果這樣寫的話,每一次我們使用裝飾器都要加上 test = dec(test) 進行重新賦值。所以在這裡我們可以使用乙個簡單的方法 就是 在原函式的前面加上 @dec ,它就相當於test = dec(test)。
import time
def dec(func):
def dec_1():
start_time = time.time()
res = func()
stop_time = time.time()
print('程式執行時間%s' %(stop_time-start_time))
return res
return dec_1
@dec
#test = dec(test)
def test():
time.sleep(3)
print('測試完成')
test()
#測試完成
#程式執行時間3.0002593994140625
完成 7 裝飾器模式
裝飾器模式定義如下 動態地給乙個物件新增一些額外的職責。在增加功能方面,裝飾器模式比生成子類更為靈活。修飾器 decorator 模式能夠以透明的方式 不會影響其他物件 動態地將功能新增到乙個物件中。從實現的角度來說,python修飾器是乙個可呼叫物件 函式 方法 類 接受乙個函式物件fin作為輸入...
裝飾器之基本
在學習裝飾器之前,一定要了解乙個開放封閉原則。軟體開發都應該遵循開放封閉原則。為什麼說要對擴充套件是開放的呢?因為軟體開發過程不可能一次性把所有的功能都考慮完全,肯定會有不同的新功能需要不停新增。也就是說需要我們不斷地去擴充套件已經存在 的功能,這是非常正常的情況。那為什麼說對修改是封閉的呢?比如說...
python之路(7)裝飾器
前言 裝飾器 為函式新增附屬功能,本質為函式 原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器 高階函式 函式巢狀 閉包 定義下面函式 def cal l res 0 for i in l time.sleep 0.1 res 1return res 想要實現檢測函式的執行時間 imp...