Python: 使用装饰器“@”取得函数执行时间
生活随笔
收集整理的這篇文章主要介紹了
Python: 使用装饰器“@”取得函数执行时间
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
class A():
Python: 使用裝飾器“@”取得函數(shù)執(zhí)行時(shí)間 - oldJ的學(xué)習(xí)筆記 - 博客頻道 - CSDN.NET
Python: 使用裝飾器“@”取得函數(shù)執(zhí)行時(shí)間
分類: Python 2009-10-14 12:53 752人閱讀 評(píng)論(0) 收藏 舉報(bào)Python中可以使用裝飾器對(duì)函數(shù)進(jìn)行裝飾(或說包裝),利用這個(gè)特性,可以很方便、簡(jiǎn)潔地解決一些問題,比如獲得函數(shù)執(zhí)行時(shí)間的問題。
首先,我們定義一個(gè)函數(shù),如下:
[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?
當(dāng)然,不要忘了“import time”導(dǎo)入time模塊。這個(gè)函數(shù)就可以用作我們計(jì)算函數(shù)執(zhí)行時(shí)間的修飾器了。
接下來,我們就可以在需要計(jì)時(shí)的函數(shù)前一行引用它作為裝飾,比如:
[python] view plaincopyprint?
??? @exeTime?
??? def foo():?
??????? for i in xrange(10000000):?
??????????? pass?
注意最上方的“@exeTime ”,裝飾器的語法以“@”開頭,接著是裝飾函數(shù),在本例中為“exeTime”。這時(shí),執(zhí)行函數(shù)foo,裝飾器就會(huì)在控制臺(tái)打印出這個(gè)函數(shù)的執(zhí)行時(shí)間了。
完整代碼如下:
[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()?
在筆者電腦上的運(yùn)行結(jié)果為:
@13:12:27, {foo} start
@13:12:27, {foo} end
@0.203s taken for {foo}
當(dāng)然,上面只是一個(gè)很簡(jiǎn)單的示例,事實(shí)上,本例中的裝飾器exeTime不僅可以裝飾類似上面“foo”這樣不帶參數(shù)的函數(shù),也能裝飾帶任意參數(shù)的函數(shù),甚至還可以裝飾類的方法,用法與上面是一樣的。
除了計(jì)算運(yùn)行時(shí)間外,裝飾器還可以有很多用途,比如記錄運(yùn)行日志等,更多的用途等待更多的朋友去發(fā)掘。
總結(jié)
以上是生活随笔為你收集整理的Python: 使用装饰器“@”取得函数执行时间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Error]SyntaxError:
- 下一篇: 读书笔记《集体智慧编程》Chapter