python 統(tǒng)計代碼耗時的幾種方法分享
在代碼執(zhí)行前后各記錄一個時間點,兩個時間戳相減即程序運行耗時。
獲取時間戳time.time()
import timestart_time = time.time()sum = 0for i in range(100000000): sum += iprint(sum)end_time = time.time()print('耗時: {:.2f}秒'.format(end_time - start_time))輸出:4999999950000000耗時: 10.53秒
獲取當前日期 datetime.datetime.now()
import datetimestart_time = datetime.datetime.now()sum = 0for i in range(100000000): sum += iprint(sum)end_time = datetime.datetime.now()print('耗時: {}秒'.format(end_time - start_time))裝飾器
裝飾器是一個裝飾函數(shù)的函數(shù),能夠在不改變函數(shù)源碼和函數(shù)調(diào)用方式的情況下給函數(shù)增加新的功能。很多時候統(tǒng)計函數(shù)的耗時,可以使用裝飾器實現(xiàn)。
import timedef get_time(f): def inner(*arg,**kwarg):s_time = time.time()res = f(*arg,**kwarg)e_time = time.time()print(’耗時:{}秒’.format(e_time - s_time))return res return inner@get_timedef test(): time.sleep(2) # 模擬運行2stest()輸出:耗時:2.000781536102295秒timeit模塊
timeit 模塊提供了測量 Python 小段代碼執(zhí)行時間的方法,可以在命令行界面直接使用,也可以通過導入模塊進行調(diào)用。
語句執(zhí)行 number 次的時間
#導入timeit.timeitfrom timeit import timeit#看x=1的執(zhí)行一次的時間(number可以省略,缺省為1000000)t1 = timeit(’x=1’, number=1)print(t1)#一個列表生成器的執(zhí)行時間,執(zhí)行10000次:t2 = timeit(’[i for i in range(100) if i%2==0]’, number=10000)print(t2)輸出:4.0000000001150227e-070.04841430000000002
計算函數(shù)的執(zhí)行時間
from timeit import timeitdef func(a): sum = 0 for i in range(a):sum += i return sum# timeit(函數(shù)名_字符串,運行環(huán)境_字符串,number=運行次數(shù))t = timeit(’func(10000000)’, ’from __main__ import func’, number=1)print(t)輸出:0.4887406重復調(diào)用 timeit()
repeat() 方法相當于持續(xù)多次調(diào)用 timeit() 方法并將結(jié)果返回為一個列表。repeat 參數(shù)指定重復的次數(shù),number 參數(shù)傳遞給 timeit() 方法的 number 參數(shù)。
import timeitdef func(a): sum = 0 for i in range(a):sum += i return sum# timeit(函數(shù)名_字符串,運行環(huán)境_字符串,number=運行次數(shù),repeat=重復次數(shù),repeat=5)t = timeit.repeat(’func(100000)’, ’from __main__ import func’, number=100, repeat=5)print(t)cProfile性能分析工具
cProfile(語言編寫的測試模塊)是一個標準庫內(nèi)建的性能分析工具,可以在標準輸出中看到每一個函數(shù)被調(diào)用的次數(shù)和運行的時間,從而找到程序的性能瓶頸,從而有針對性的進行性能優(yōu)化。
Python代碼性能分析之cProfile
import cProfiledef func(a): sum = 0 for i in range(a):sum += i return sumif __name__ == ’__main__’: cProfile.run('func(10000000)')
以上就是python 統(tǒng)計代碼耗時的幾種方法分享的詳細內(nèi)容,更多關(guān)于python 統(tǒng)計代碼耗時的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 前端html+css實現(xiàn)動態(tài)生日快樂代碼2. 不要在HTML中濫用div3. el-input無法輸入的問題和表單驗證失敗問題解決4. CSS3實例分享之多重背景的實現(xiàn)(Multiple backgrounds)5. XML基本概念XPath、XSLT與XQuery函數(shù)介紹6. XML入門的常見問題(四)7. WML的簡單例子及編輯、測試方法第1/2頁8. vue實現(xiàn)復制文字復制圖片實例詳解9. 關(guān)于html嵌入xml數(shù)據(jù)島如何穿過樹形結(jié)構(gòu)關(guān)系的問題10. XML入門的常見問題(三)
