日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python: 使用装饰器“@”取得函数执行时间

發(fā)布時(shí)間:2023/12/19 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。