Python: 使用装饰器“@”取得函数执行时间
生活随笔
收集整理的這篇文章主要介紹了
Python: 使用装饰器“@”取得函数执行时间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
class A():
Python: 使用裝飾器“@”取得函數執行時間 - oldJ的學習筆記 - 博客頻道 - CSDN.NET
Python: 使用裝飾器“@”取得函數執行時間
分類: Python 2009-10-14 12:53 752人閱讀 評論(0) 收藏 舉報Python中可以使用裝飾器對函數進行裝飾(或說包裝),利用這個特性,可以很方便、簡潔地解決一些問題,比如獲得函數執行時間的問題。
首先,我們定義一個函數,如下:
[python] view plaincopyprint?
??? def exeTime(func):?
??????? def newFunc(*args, **args2):?
??????????? t0 = time.time()?
??????????? print "@%s, {%s} start" % (time.strftime("%X", time.localtime()), func.__name__)?
??????????? back = func(*args, **args2)?
??????????? print "@%s, {%s} end" % (time.strftime("%X", time.localtime()), func.__name__)?
??????????? print "@%.3fs taken for {%s}" % (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, {%s} start" % (time.strftime("%X", time.localtime()), func.__name__)?
??????????? back = func(*args, **args2)?
??????????? print "@%s, {%s} end" % (time.strftime("%X", time.localtime()), func.__name__)?
??????????? print "@%.3fs taken for {%s}" % (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, {foo} start
@13:12:27, {foo} end
@0.203s taken for {foo}
當然,上面只是一個很簡單的示例,事實上,本例中的裝飾器exeTime不僅可以裝飾類似上面“foo”這樣不帶參數的函數,也能裝飾帶任意參數的函數,甚至還可以裝飾類的方法,用法與上面是一樣的。
除了計算運行時間外,裝飾器還可以有很多用途,比如記錄運行日志等,更多的用途等待更多的朋友去發掘。
總結
以上是生活随笔為你收集整理的Python: 使用装饰器“@”取得函数执行时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Error]SyntaxError:
- 下一篇: python 文本处理2