python計時模組 timeit

2021-09-01 05:32:04 字數 4332 閱讀 4840

timeit模組:

測試乙個列表推導式與for迴圈的時間

import timeit

foooo = """

sum =

for i in range(1000):

"""

print(timeit.timeit(stmt="[i for i in range(1000)]", number=100000))

print(timeit.timeit(stmt=foooo, number=100000))

#res:

#3.2855970134734345

#8.19918414604134

使用列表推導式要比正常使用list追加元素 通過10w次迴圈會快上近5秒左右,速度快上近三倍。

timeit 模組抽象出了;兩個可以直接使用的方法,包了一層可以讓我們不用關心內部的實現,下面看一下模組裡面的**:

def timeit(stmt="pass", setup="pass", timer=default_timer,

number=default_number):

"""convenience function to create timer object and call timeit method."""

return timer(stmt, setup, timer).timeit(number)

def repeat(stmt="pass", setup="pass", timer=default_timer,

repeat=default_repeat, number=default_number):

"""convenience function to create timer object and call repeat method."""

return timer(stmt, setup, timer).repeat(repeat, number)

可以看到這兩個方法都是對timer類包了一層這幾個引數:

stmt: 這個引數就是statement,可以把要進行計算時間的**放在裡面。他可以直接接受字串的表示式,也可以接受單個變數,也可以接受函式。

setup:  這個引數可以將stmt的環境傳進去。比如各種import和引數什麼的。

timer: 這個引數一般使用不到,具體使用可以參看文件。

timer類下面還有repeat和timeit方法 使用也非常方便就是 timeit.timeit 和  timeit.repeat。

乙個就是上面例子的timeit,乙個就是repeat 其實repeat就比timeit多了乙個執行timer次數的引數。這個執行次數會以陣列的形式返回.

import timeit

foooo = """

sum =

for i in range(1000):

"""

print(timeit.repeat(stmt="[i for i in range(1000)]", repeat=2, number=100000))

print(min(timeit.repeat(stmt="[i for i in range(1000)]", repeat=2, number=100000)))

#res:

#[3.4540683642063277, 3.300991128415932]

#3.321008256502136

我們可以根據此,對所有執行時間取min最小值,平均值,最大值得到我們想要的資料。 

# coding: utf-8

import timeit

# 初始化類

x = """

say_hi.parsefromstring(p)

"""

y = """

******json.loads(x)

"""

print(timeit.timeit(stmt=x, setup="import say_hi_pb2;"

"say_hi = say_hi_pb2.sayhi();"

"say_hi.id = 13423;"

"say_hi.something = 'axiba';"

"say_hi.extra_info = 'xiba';"

"p =say_hi.serializetostring()", number=1000000))

print(timeit.timeit(stmt=y, setup="import ******json; "

"json=;"

"x = ******json.dumps(json)", number=1000000))

另外需要補充一點是,如果你想直接 stmt 那裡執行函式。可以把函式申明在當前檔案中,然後在 stmt = 『func()』 執行函式。然後使用 setup = 『from __main__ import func』 即可,如果要import 多個需要使用 setup = from __main__ import func; import ******json'

def test1():

n=0for i in range(101):

n+=i

return n

def test2():

return sum(range(101))

def test3():

return sum(x for x in range(101))

if __name__=='__main__':

from timeit import timer

t1=timer("test1()","from __main__ import test1")

t2=timer("test2()","from __main__ import test2")

t3=timer("test3()","from __main__ import test3")

print(t1.timeit(10000))

print(t2.timeit(10000))

print(t3.timeit(10000))

print(t1.repeat(3,10000))

print(t2.repeat(3,10000))

print(t3.repeat(3,10000))

t4 = timeit.timeit(stmt=test1,setup="from __main__ import test1",number=10000)

t5 = timeit.timeit(stmt=test2,setup="from __main__ import test2",number=10000)

t6 = timeit.timeit(stmt=test3,setup="from __main__ import test3",number=10000)

print(t4) #0.05130029071325269

print(t5) #0.015494466822610305

print(t6) #0.05650903115721077

print(timeit.repeat(stmt=test1,setup="from __main__ import test1",number=10000)) # [0.05308853391023148, 0.04544335904366706, 0.05969025402337652]

print(timeit.repeat(stmt=test2,setup="from __main__ import test2",number=10000)) # [0.012824560678924846, 0.017111019558035345, 0.01429126826003152]

print(timeit.repeat(stmt=test3,setup="from __main__ import test3",number=10000)) # [0.07385010910706968, 0.06244617606430164, 0.06273494371932059]

#res:

0.043916918200588385

0.014892355541932578

0.05214884436618059

[0.04372713709398021, 0.04197132052492908, 0.04255431716177577]

[0.014356804181737959, 0.012456603785177323, 0.012629659578433372]

[0.0543709217115389, 0.05334180294099272, 0.05334931226535494]

參考:

python中計時工具timeit模組的基本用法

想測試一行 的執行時間,在python中比較方便,可以直接使用timeit 看個例子吧 import timeit 執行命令 t2 timeit.timer x range 1000 顯示時間 t2.timeit 10.620039563513103 執行命令 t1 timeit.timer sum...

倒計時模組

在scene裡新增 this.addchild new timecount 使用美術字的倒計時 需要 fnt檔案預載入 美術字的名字注意修改 使用的時候通過 cc.eventmanager.dispatchcustomevent user time count set time,5 設定倒計時時間 ...

python計時函式 python計時函式

技術文件 一屏 使用者滑動螢幕至主體內容展現結束之前,在頁面任意位置停留時看到的所有內容,稱為一屏。移動端適配 為了使pc頁面能夠在移動端正常展現的手段,保證使用者不需要縮小 放大 左右滑動即可看清全部字型。廣告 指為了某種特定的需要,通過一定形式的 公開且廣泛地向公眾傳遞資訊的宣傳手段 本 中的廣...