2016-04-12 70 views
-3

我使用python timeit來查看函數運行需要多長時間。python timeit是否考慮設置計數

 
    setup = '''from __main__ import my_func 
    import random 
    l = list(range(10000)) 
    random.shuffle(l)''' 
    timeit.timeit('my_func(l)', setup=setup, number=1000) 

我得到的結果比使用日期時間的「正常」檢查要大。 timeit是否也會計算設置所需的時間,如果是這樣 - 我如何禁用它?

+0

請包括您的設置與日期時間和兩者的結果。 – MSeifert

+1

向我們展示結果。他們是1000倍大嗎? Timeit返回[number = 1000'執行所花費的時間](https://docs.python.org/3/library/timeit.html#timeit.Timer.timeit)。不,不包括安裝階段。 –

回答

0

請問my_func(l)變異l?這可能會影響時間。

timeit將運行一次安裝程序,並在每次調用要定時的代碼時重新使用由安裝程序創建的對象。此外,它可以調用代碼幾次來大致估計它的運行速度,並在實際的定時運行之前選擇迭代的次數(儘管不是當你自己指定了運行次數時)。這意味着如果初始快速運行,它將不會包含在定時結果中。

例如,如果my_func()是一個寫得很糟糕的快速排序功能,它可能在您在混洗列表中調用時運行速度很快,而當您使用(現在已排序)列表再次調用它時會非常緩慢地運行。 timeit只會測量非常慢的通話。

+0

非常感謝你! :)它確實改變了列表,我沒有意識到該設置只運行一次,這確實會影響我的結果 – Lian

0

docs說:

安裝程序的執行時間是從整體的定時 執行運行排除。

0

Python的2.0 docs是很清楚,建立語句不定時:

主要發言時間的執行次數。這會執行一次設置 語句,然後返回多次執行主要語句(以秒爲單位)作爲浮點數所花費的時間。

但是,如果您不確定,請在安裝語句中放入一個大而緩慢的過程,然後進行測試,看看它有什麼不同。