python裝飾器,細緻講解

2022-07-09 22:45:16 字數 1288 閱讀 9168

*args,**kwargs

命名空間與作用域:命名空間的「巢狀」是在函式定義階段,即檢測語法的時候確定的

函式物件:

函式的巢狀定義

閉包函式

傳遞函式的方式

通過引數的形式為函式傳值

通過閉包的方式為函式傳值

什麼是裝飾器

為何要用裝飾器

需求:在不修改index函式源**以及呼叫方式的情況下為其新增統計時間的功能

def index(x,y):

time.sleep(3)

print('index %s %s'%(x,y))

index(111,222)

index(111,y=222)

index(x=111,y=222)

方案一:直接在index函式內加統計時間的**

import time

def index(x,y):

start = time.time()

time.sleep(3)

print('index %s %s'%(x,y))

stop = time.time()

print(stop-start)

index(111,333)

問題:沒有修改**的呼叫方式,但是修改了源**,方案一失敗

方案二:在函式呼叫的時候新增統計時間的**

def index(x,y):

time.sleep(3)

print('index %s %s'%(x,y))

start = time.time()

index(111,222)

stop = time.time()

print(stop-start)

​start = time.time()

index(333,444)

stop = time.time()

print(stop-start)

​start = time.time()

index(555,666)

stop = time.time()

print(stop-start)

問題:沒有修改index的源**,也沒有修改呼叫方式,並且加上了新功能,但是**冗餘。方案二失敗

方案三:將方案二中冗餘的**部分寫成函式

問題:解決了**冗餘問題,但是函式的呼叫方式發生改變。方案三失敗

方案三優化一:將index的引數寫活

方案三優化二:在優化一的基礎上把被裝飾的物件寫活,原來只能裝飾index

python裝飾器講解筆記

公共 判斷乙個數是否是質數def is prime num if num 2 return false elif num 2 return true else for i in range 2 num if num i 0 return false return true1 不帶有裝飾器def pr...

python裝飾器 閉包 垃圾講解

第一部分裝飾器,接觸很久,沒理會原理。慚愧。第二部分裝飾器傳參的小實踐。第三部分閉包的理解,如果有錯誤,留著,以後再說。其本意就是在不改變原函式的基礎上,對函式新增功能。用途呢,aop思想,你說是吧。乙個自己寫裝飾器的例子 定義裝飾器 這種寫法比較適合簡單的包裹,只是會把real func前面 裹住...

舉例講解python裝飾器的使用

需求 領導想知道,該測試用例執行,用例的執行時間是多少,我們怎麼實現該 如下 想要實現下面用例的執行時間是多少,怎麼做?def creat oder 這個是原 一條測試用例 print 執行測試用例 time.sleep 1 你可能會想到,記錄開始時間,結束時間,然後計算差就行了唄,好,那我們來看看...