Python day7 裝飾器基本用法

2021-08-22 06:13:37 字數 1571 閱讀 9423

裝飾器:本質就是函式,功能是為其他函式新增附加功能

原則: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...