5

次の間に大きな違いはありますか?

from time import time
start = time()
# some process
print time() - start

と:

from timeit import timeit
def my_funct():
    # some process
print timeit(my_funct, number=1)

例として、Project Euler 1を使用します(理解しやすい/解決しやすいため)。

def pE1test1(): # using time()
    from time import time
    start = time()
    print sum([n for n in range(1, 1000) if n%3==0 or n%5==0])
    print time() - start

def pE1test2(): # using timeit
    print sum([n for n in range(1, 1000) if n%3==0 or n%5==0])

from timeit import timeit
pE1test1()
print timeit(pE1test2, number=1)

これは以下を出力します:

>>> 
233168
0.0090000629425
233168
0.00513921300363

timeitとの主な違いは何timeですか?

4

2 に答える 2

7

timeitシステムで利用可能な最適なタイミング関数が使用されます。のドキュメントを参照してくださいtimeit.default_timer

また、timeit ガベージ コレクタをオフにします。

また、使い方がtimeit間違っていると思います。ドキュメントの最後のに従って、文字列を渡す必要があります。

print timeit("pE1test2()","from __main__ import PE1test2",number=1)

そしてもちろん、もう 1 つの大きな違いは、timeit数千回の反復 (タイミング結果が意味を持つ唯一の時間) に対して関数の実行のタイミングを取ることが簡単になることです。これにより、他のプログラムよりも時間がかかる単一の実行の重要性が減少します (たとえば、システム リソースが他のプログラムによって占有されているため)。

于 2013-02-01T16:18:07.890 に答える
0

2つのモジュールの目的は大きく異なります。

時間モジュールは、基盤となるシステムによって提供されるさまざまな時間/日付機能への低レベルのアクセスを提供します。

timeitモジュールは、特にパフォーマンステストを実行するためのものです。

ご指摘のとおり、時間内に関数を使用して簡単なタイミングをとることができますが、パフォーマンステストを実行しようとすると人々が陥る一般的な落とし穴がいくつかあります。timeitは、賢明に比較できる繰り返し可能な数を取得するために、それらを軽減しようとします。

于 2013-02-01T16:35:10.260 に答える