您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)python統(tǒng)計(jì)代碼耗時(shí)的方法有哪些,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在代碼執(zhí)行前后各記錄一個(gè)時(shí)間點(diǎn),兩個(gè)時(shí)間戳相減即程序運(yùn)行耗時(shí)。
獲取時(shí)間戳time.time()
import time start_time = time.time() sum = 0 for i in range(100000000): sum += i print(sum) end_time = time.time() print("耗時(shí): {:.2f}秒".format(end_time - start_time)) 輸出: 4999999950000000 耗時(shí): 10.53秒
獲取當(dāng)前日期 datetime.datetime.now()
import datetime start_time = datetime.datetime.now() sum = 0 for i in range(100000000): sum += i print(sum) end_time = datetime.datetime.now() print("耗時(shí): {}秒".format(end_time - start_time))
裝飾器是一個(gè)裝飾函數(shù)的函數(shù),能夠在不改變函數(shù)源碼和函數(shù)調(diào)用方式的情況下給函數(shù)增加新的功能。很多時(shí)候統(tǒng)計(jì)函數(shù)的耗時(shí),可以使用裝飾器實(shí)現(xiàn)。
import time def get_time(f): def inner(*arg,**kwarg): s_time = time.time() res = f(*arg,**kwarg) e_time = time.time() print('耗時(shí):{}秒'.format(e_time - s_time)) return res return inner @get_time def test(): time.sleep(2) # 模擬運(yùn)行2s test() 輸出: 耗時(shí):2.000781536102295秒
timeit 模塊提供了測(cè)量 Python 小段代碼執(zhí)行時(shí)間的方法,可以在命令行界面直接使用,也可以通過(guò)導(dǎo)入模塊進(jìn)行調(diào)用。
語(yǔ)句執(zhí)行 number 次的時(shí)間
#導(dǎo)入timeit.timeit from timeit import timeit #看x=1的執(zhí)行一次的時(shí)間(number可以省略,缺省為1000000) t1 = timeit('x=1', number=1) print(t1) #一個(gè)列表生成器的執(zhí)行時(shí)間,執(zhí)行10000次: t2 = timeit('[i for i in range(100) if i%2==0]', number=10000) print(t2) 輸出: 4.0000000001150227e-07 0.04841430000000002
計(jì)算函數(shù)的執(zhí)行時(shí)間
from timeit import timeit def func(a): sum = 0 for i in range(a): sum += i return sum # timeit(函數(shù)名_字符串,運(yùn)行環(huán)境_字符串,number=運(yùn)行次數(shù)) t = timeit('func(10000000)', 'from __main__ import func', number=1) print(t) 輸出: 0.4887406
repeat() 方法相當(dāng)于持續(xù)多次調(diào)用 timeit() 方法并將結(jié)果返回為一個(gè)列表。repeat 參數(shù)指定重復(fù)的次數(shù),number 參數(shù)傳遞給 timeit() 方法的 number 參數(shù)。
import timeit def func(a): sum = 0 for i in range(a): sum += i return sum # timeit(函數(shù)名_字符串,運(yùn)行環(huán)境_字符串,number=運(yùn)行次數(shù),repeat=重復(fù)次數(shù),repeat=5) t = timeit.repeat('func(100000)', 'from __main__ import func', number=100, repeat=5) print(t)
cProfile(語(yǔ)言編寫(xiě)的測(cè)試模塊)是一個(gè)標(biāo)準(zhǔn)庫(kù)內(nèi)建的性能分析工具,可以在標(biāo)準(zhǔn)輸出中看到每一個(gè)函數(shù)被調(diào)用的次數(shù)和運(yùn)行的時(shí)間,從而找到程序的性能瓶頸,從而有針對(duì)性的進(jìn)行性能優(yōu)化。
Python代碼性能分析之cProfile
import cProfile def func(a): sum = 0 for i in range(a): sum += i return sum if __name__ == '__main__': cProfile.run("func(10000000)")
關(guān)于“python統(tǒng)計(jì)代碼耗時(shí)的方法有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。