2016-08-22 62 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:谢谢。这就是我没有在翻译中测试这个的原因。 –