Python 使用 timeit 进行循环基准测试
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
这是怎么解决的?
试试这个:
code='etok=utils.token("%s","%s","%s")' % (filename, keypath, i)
这将允许您创建具有所需值的代码字符串。此外,通过使用 %s
转换,i
被强制转换为 str
类型。
编辑: 在值周围添加了双引号。
filename
未在 timeit
块中的代码范围内定义。我不知道你的代码中的 utils
是什么,但假设它期望 filename
和 keypath
作为字符串只是替换你的
code='etok=utils.token(filename,keypath,str(i))'
符合:
code='etok=utils.token("{}","{}",{})'.format(filename, keypath, i)
我想在 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
这是怎么解决的?
试试这个:
code='etok=utils.token("%s","%s","%s")' % (filename, keypath, i)
这将允许您创建具有所需值的代码字符串。此外,通过使用 %s
转换,i
被强制转换为 str
类型。
编辑: 在值周围添加了双引号。
filename
未在 timeit
块中的代码范围内定义。我不知道你的代码中的 utils
是什么,但假设它期望 filename
和 keypath
作为字符串只是替换你的
code='etok=utils.token(filename,keypath,str(i))'
符合:
code='etok=utils.token("{}","{}",{})'.format(filename, keypath, i)