測量代碼運行所需時間主要有兩種方法,使用 time.time()
,這是通用的方法,或者使用 timeit.timeit()
測量小的代碼段。
time()
這是通用方法:
import time
def powers(limit):
return [x**2 for x in range(limit)]
start = time.time()
powers(5000000)
end = time.time()
print(end-start) # 1.0257349014282227 (秒)
或者將測量時間的相關代碼放到一個高階函數 measure_runtime
中,接受函數作為參數,可以測量任意函數運行所需時間:
import time
def measure_runtime(func):
time_start = time.time()
func()
time_end = time.time()
print(time_end - time_start)
def powers(limit):
return [x**2 for x in range(limit)]
measure_runtime(lambda: powers(5000000)) # 1.006134033203125 秒
timeit()
此函數用於測量小的代碼段運行所需時間:
此函數有5個參數:
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
timeit.timeit(stmt='', setup='', timer=time.perf_counter, number=1000000, globals=None)
stmt
是待測代碼段,setup
作用類似於初始化代碼段中變量,在 stmt
之前執行,number
如果不設置,那麼 stmt
默認執行1000000
即一百萬次,如果 stmt
執行一次需要 1 秒,一百萬秒是非常長的時間,所以 number
參數一般應該設置。
用法:
import timeit
print(timeit.timeit("[x**2 for x in range(5000000)]", number=4))
print(timeit.timeit("list(map(lambda x: x**2, range(100)))", setup="", number=10000))
print(timeit.timeit(stmt='while x < 1000000: x += 1', setup='x = 0', number = 10000))
運行結果:
4.101922899999408 # number = 4, 測了4 次,共用了4 秒
0.23630119999870658
0.03228399999898102
timeit.timeit()
除以 number
, 將得到 stmt
執行一次所需的平均時間。