timeitで実行時間計測

「この関数の実行時間を計測して、もっと高速化しよう」といった時に実行時間計測を便利に行うモジュール。

import timeit

# 計測対象の関数
def number_join_by_forloop():
    s = "-"
    for n in range(10000):
        s += str(n)
    return s

# 1000回実行を繰り返した秒数
t1 = timeit.timeit('number_join_by_forloop()', number=1000, globals=globals())
print("for loop: %.3f sec" % t1)

timeit関数での実行は、関数を実行するのとは別の名前空間で実行するため、そのままでは計測対象の関数を参照できない。globals引数で実行時のグローバル領域をコピーして指定すると呼び出し側で定義した関数が参照できる(globals引数はPython3.5から)。

呼び出し側の名前空間を使用しない、単純なPythonコードであればglobals引数は不要。

Python3.5以前のglobals引数が使えない環境では、以下のように自身のモジュールをインポートすることで参照できる。

t2 = timeit.timeit('from __main__ import number_join_by_forloop; number_join_by_forloop()', number=1000)
print("map join: %.3f sec" % t2)
関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)