timeit 関数を使用して、作成した 2 つのメソッドでいくつかのメトリックを実行していますが、問題が発生しています。以下の単純化されたサンプル ファイルを参照してください。
fileA.py、これはスタンドアロンで実行され、関数 foo を timeit でテストしようとしています。
if (len(sys.argv) < 2):
print "Need a command line argument, exiting"
sys.exit(1)
def foo(n):
#does some stuff, returns an int
この関数はスタンドアロンで正常に動作し、次のように実行できます./fileA.py 5
私は同様のファイルを持っています。fileB.py
これは foo の異なる実装ですが、foo の内部を除いてまったく同じです。
ここで、fileA と fileB の両方で timeit を使用しようとしています (fileB の部分は省略されています)。
for n in range(0,10):
setupStr = 'from fileA import foo'
setupStr += '; from __main__ import n'
mytime = timeit.Timer('foo(n)', setupStr)
timeTaken = mytime.timeit(1)
print #results, not important
私が得ている問題は、fileC.pyを実行すると、「コマンドライン引数が必要です、終了します」と表示されて終了することです。これが fileA.py から来ていることは理解していますが、コードのこの部分が実行されているのはなぜですか? 私は、timeit の動作方法として、fileA から foo をインポートしているだけだという印象を受けました。私は間違っていると思いますか?もしそうなら、これを修正する最善の方法は何でしょうか?メソッドfoo(n)
をテストし、必要なコマンド ライン引数を使用して fileA をスタンドアロンで実行できるようにするにはどうすればよいでしょうか?