我正在使用timeit函數在我編寫的兩種方法上運行一些度量標準,並且遇到問題。見簡化的例子如下文件:如何正確導入函數以供timeit使用
fileA.py,這種運行獨立,和我想要測試的功能,foo且timeit:
if (len(sys.argv) < 2):
print "Need a command line argument, exiting"
sys.exit(1)
def foo(n):
#does some stuff, returns an int
此功能工作正常的獨立,我可以運行它作爲./fileA.py 5
我有一個類似的文件,fileB.py
這是一個不同的foo實現,但是除了foo的內部完全相同。
現在我有一個fileC,在那裏我想雙方的fileA使用timeit和FILEB(略FILEB部分):
for n in range(0,10):
setupStr = 'from fileA import foo'
setupStr += '; from __main__ import n'
mytime = timeit.Timer('foo(n)', setupStr)
timeTaken = mytime.timeit(1)
print #results, not important
,我得到的問題,就是當我運行fileC。 py,我得到「需要命令行參數,exitng」並退出。我知道這是來自fileA.py,但爲什麼這部分代碼是在運行呢?我的印象是timeit的工作方式,我只從fileA導入foo。我錯了嗎?如果是這樣,那麼糾正這種情況的最好方法是什麼,以便我可以測試foo(n)
方法並使fileA能夠使用所需的命令行參數獨立運行?
您還可以簡化雖然它沒有解決導入問題,但它直接導入模塊,然後使用'functools.partial'創建一個可直接傳遞給'timeit'的可調用對象(而不是一個包含代碼的字符串)。 –
@KarlKnechtel Nifty,我會相當頻繁地使用timeit,我認爲(這是針對數據結構中的一門課程),所以下次我會嘗試一下。 – turbo