python 裝飾器 時間計時範例
來自高天的講解中複製出來的代碼
【python】装饰器超详细教学,用尽毕生所学给你解释清楚,以后再也不迷茫了!
import time
def timeit(iteration):
def inner(f):
def wrapper(*args, **kwargs):
start = time.time()
for _ in range(iteration):
ret = f(*args, **kwargs)
print(time.time() - start)
return ret
return wrapper
return inner
@timeit(1000)
def double(x):
return x * 2
double(2)
這個例子很關鍵的地方在於事後忘記了看一眼就馬上明白了
怎麼理解最快,這個最快的辦法就是不要理解
首先第一個問號區 *args, **kwargs
,只需要記住一件事情這整個區塊叫做 完美轉發
我不管前面的人給我什麼反正我就是直接複製對方的參數設定值
剩下的直接都當作一個區塊記下來就好了,只需要知道從 1000 那個位置可以設置 for 迴圈的變數,然後在 ret 的位置就是執行原本的函式
在 wrapper 中你可以對這個函式的前跟後動手,你希望在函式執行前先弄點什麼就寫在 ret 之前,你希望在執行後再弄點什麼就寫在 ret 之後
而這個對函式前後動手的行為就是裝飾器中的一個核心價值了,只需要透過追加一行就可以包裝函式前後的動作了
如果要放在類裡面參考這篇
【python】如何在class内部定义一个装饰器?这里的坑你要么不知道,要么不会填! (youtube.com)
沒有留言:
張貼留言