2016-08-22 67 views
2

我想基於pytohn for循環中的特定代碼段進行基準測試。我使用timeit如下:Python時鐘循環基準測試

def createTokens(): 
    keypath=('./pickles/key.pickle') 
    path="./data/" 
    directory = os.listdir(path) 
    tok={} 
    print('create tokens..') 
    t=[2**4,2**5,2**6,2**7,2**8,2**9,2**10,2**12,2**14,2**16] 
    files=['pl_10000004','pl_10000002','pl_100000026'] 
    for filename in files: 
     for i in t: 
      code='etok=utils.token(filename,keypath,str(i))' 
      t = timeit.Timer(stmt=code,setup='from __main__ import utils') 
      print(filename+'_'+str(i)+'.pickle') 
      print ('%f'%float(t.timeit(10/10))) 

然而,這引起了:

NameError: global name 'filename' is not defined 

當我包括設置變量的Python名說:

ImportError: cannot import name filename 

該如何解決?

+0

這可怎麼辦呢? – curious

回答

2

filename未在timeit塊中的代碼範圍內定義。我不知道什麼是utils在你的代碼,但假設,預計filenamekeypath作爲字符串只是更換您

code='etok=utils.token(filename,keypath,str(i))' 

行:

code='etok=utils.token("{}","{}",{})'.format(filename, keypath, i) 
1

試試這個:

code='etok=utils.token("%s","%s","%s")' % (filename, keypath, i) 

這將允許您創建具有所需的值的代碼串。此外,通過使用%s轉換,i被強制轉換爲str類型。

編輯:在值附近添加雙引號。

+0

我得到的錯誤與賦予變量的值有關:'NameError:全局名稱'pl_10000004'未定義'。 pl_10000004是循環中文件名var的第一個賦值 – curious

+0

您需要在字符串插入點周圍添加引號。即'utils.token( 「%S」, 「%s」 時,%S)'。 – FamousJameous

+0

@FamousJameous:謝謝。這就是我沒有在翻譯中測試這個的原因。 –