簡體   English   中英

帶有timeit的Python循環基准測試

[英]Python loop benchmark with timeit

我想在Python的for循環中對特定的代碼段進行基准測試。 我正在使用timeit ,如下所示:

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

這怎么解決?

filename未在timeit塊的代碼范圍內定義。 我不知道是什么utils是在你的代碼,但假設,預計filenamekeypath為字符串只需更換您的

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

符合:

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

嘗試這個:

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

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

編輯:在值周圍添加了雙引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM