2016-08-22 8 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 

をこれが解決される方法は、以下のように私ははtimeitを使用していますか?

+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:ありがとう。それは私が通訳でこれをテストしないために得たものです。 –

関連する問題