class a():
python: 使用裝飾器「@」取得函式執行時間 - oldj的學習筆記 - 部落格頻道 - csdn.net
python中可以使用裝飾器對函式進行裝飾(或說包裝),利用這個特性,可以很方便、簡潔地解決一些問題,比如獲得函式執行時間的問題。
首先,我們定義乙個函式,如下:
[python] view plaincopyprint?
def exetime(func):
def newfunc(*args, **args2):
t0 = time.time()
print "@%s, start" % (time.strftime("%x", time.localtime()), func.__name__)
back = func(*args, **args2)
print "@%s, end" % (time.strftime("%x", time.localtime()), func.__name__)
print "@%.3fs taken for " % (time.time() - t0, func.__name__)
return back
return newfunc
當然,不要忘了「import time」匯入time模組。這個函式就可以用作我們計算函式執行時間的修飾器了。
接下來,我們就可以在需要計時的函式前一行引用它作為裝飾,比如:
[python] view plaincopyprint?
@exetime
def foo():
for i in xrange(10000000):
pass
注意最上方的「@exetime 」,裝飾器的語法以「@」開頭,接著是裝飾函式,在本例中為「exetime」。這時,執行函式foo,裝飾器就會在控制台列印出這個函式的執行時間了。
完整**如下:
[python:collapse] + expand sourceview plaincopyprint?
# -*- coding: utf-8 -*-
import time
# --exetime
def exetime(func):
def newfunc(*args, **args2):
t0 = time.time()
print "@%s, start" % (time.strftime("%x", time.localtime()), func.__name__)
back = func(*args, **args2)
print "@%s, end" % (time.strftime("%x", time.localtime()), func.__name__)
print "@%.3fs taken for " % (time.time() - t0, func.__name__)
return back
return newfunc
# --end of exetime
@exetime
def foo():
for i in xrange(10000000):
pass
if __name__ == "__main__":
foo()
在筆者電腦上的執行結果為:
@13:12:27, start
@13:12:27, end
@0.203s taken for
當然,上面只是乙個很簡單的示例,事實上,本例中的裝飾器exetime不僅可以裝飾類似上面「foo」這樣不帶引數的函式,也能裝飾帶任意引數的函式,甚至還可以裝飾類的方法,用法與上面是一樣的。
除了計算執行時間外,裝飾器還可以有很多用途,比如記錄執行日誌等,更多的用途等待更多的朋友去發掘。
python裝飾器 如何使用函式裝飾器
問題舉例 有時候我們想為多個函式統一新增某種功能,比如計時統計 記錄日誌,快取運算結果等 我們並不想在每個函式內一一新增完全相同的 有什麼解決方案嗎?定義裝飾器函式,用它在原函式的基礎上生成乙個新增新功能的函式來代替原函式 def memo func cache def wrap args res ...
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...
python 裝飾器 函式裝飾器 類裝飾器
python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...