2016-09-07 72 views
0

我想時間下面的函數,但它顯示我的錯誤,無法導入名稱val_in_range,錯誤是什麼,有沒有其他方法可以做得更好?Timeit計時python函數

import timeit 

x = 10000000 

def val_in_range(x, val): 
    return val in range(x) 

print (val_in_range(x,x/2)) 

timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10) 

輸出:

True 
Traceback (most recent call last): 
    File "python", line 11, in <module> 
    File "<timeit-src>", line 3, in inner 
ImportError: cannot import name 'val_in_range' 
+0

我把這個確切的代碼放在一個源文件中(添加一個shebang,'#!/ usr/bin/env python3')並運行它,它運行良好。這是你的真實代碼嗎?爲了比較,我在Linux上運行Python 3.5。 – ShadowRanger

+0

嘗試在這裏 - https://repl.it/DTwI, – garg10may

+1

該鏈接要麼緩慢或打破了我,但無論如何,我不會嘗試在這裏使用在線口譯員;他們可能會使用奇怪的機制來執行代碼(例如,通過'eval' /'exec'),這些機制與腳本或普通交互式解釋器的標準Python行爲不匹配(例如,代碼可能不會在'__main__ ',或者它定義的值在代碼完成之前不會在那裏設置,否則這會破壞你的測試用例)。 – ShadowRanger

回答

1

更換 timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10)

timeit.timeit(lambda:val_in_range(x,x/2), number=10)

你可以直接使用print聲明打印值。

+0

這有效,但是我的代碼有什麼問題,@ ShadowRanger提到它對他來說工作正常。 – garg10may

+1

你的代碼將在你的本地機器上工作,但不會在線解釋器,因爲他們處理文件的方式。 – maharshi