2016-09-07 6 views
0

私は以下の関数の時間を計っていますが、エラーが表示されますが、val_in_rangeという名前をインポートできません。エラーは何ですか?Timeit Timing a python function

import timeit 

x = 10000000 

def val_in_range(x, val): 
    return val in range(x) 

print (val_in_range(x,x/2)) 

timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10) 

出力:

True 
Traceback (most recent call last): 
    File "python", line 11, in <module> 
    File "<timeit-src>", line 3, in inner 
ImportError: cannot import name 'val_in_range' 
+0

正確なコードをソースファイルに入れて(シバン、 '#!/ usr/bin/env python3'を追加して)、それを実行して正常に動作しました。これはあなたの本当のコードですか?私は比較のために、Linux上でPython 3.5を実行しています。 – ShadowRanger

+0

ここで試してみてください - https://repl.it/DTwI、 – garg10may

+1

そのリンクは私にとっては遅くなったり壊れたりしますが、私はここでオンライン通訳を使ってみません。スクリプトや通常のインタラクティブなインタプリタの標準的なPythonの動作と一致しないコードを実行するための奇妙なメカニズムを使用するかもしれません(例えば '__main__の範囲でコードを実行することはできません'、またはコードが完了するまでそこに設定されていない値を定義します。いずれかの場合は、テストケースが破られます)。 – ShadowRanger

答えて

1

は、あなたが直接print文を使用して値を印刷することができますtimeit.timeit(lambda:val_in_range(x,x/2), number=10)

timeit.timeit('val_in_range(x,x/2)', 'from __main__ import val_in_range, x', number=10)

を交換してください。

+0

この作品が、私のコードで何が問題なのですか、@ShadowRangerは彼のためにうまくいくと言います。 – garg10may

+1

あなたのコードはあなたのローカルマシンでは動作しますが、ファイルを扱う方法のためオンラインインタプリタでは動作しません。 – maharshi