Python timeit
timeit
モジュールは、Python コードの実行をプロファイルするすべてのカテゴリツールの中で最も簡単で簡単に実装できるモジュールの 1つです。チュートリアルでは、Python での timeit
モジュールの使用と実装について説明します。
Python には、Python コードの小さなスニペットの実行時間を計算できる組み込みライブラリ timeit
が含まれています。このモジュールは、指定された Python コードを何百万回も実行することで機能し、考えられるすべての結果から、そのコードの実行中に経過した最小時間を予測します。
timeit
の利点:
- 正確で効率的な結果を提供します。この関数によってレンダリングされる実行時間の精度は、単純な
time
モジュールを使用する場合よりも単純に高くなります。 - 指定されたコードスニペットを 100 万回以上実行します。これにより、実行時に経過した時間のより関連性の高い読み取り値が提供されます。
- さらに、一般的な呼び出し可能インターフェイスとは別に、コマンドラインインターフェイスが追加されています。これは、理解と適用が簡単です。
次に、timeit
モジュールの timeit()
関数の構文に注目してみましょう。
timeit.timeit(stmt, setup, timer, number)
timeit.timeit()
関数は 4つのパラメーターを取ります。これらのパラメーターはすべて、以下の関数を理解しやすくするために簡単に説明されています。
stmt
:名前が示すように、測定する必要があるのはステートメントです。この場合、デフォルト値はpass
です。setup
:stmt
に取り組む前に実行する必要のあるコードを示します。繰り返しになりますが、デフォルトはpass
です。timer
:基本的なtimeit.Timer
オブジェクト。すでに適切なデフォルト値が割り当てられており、通常は変更する必要はありません。number
:プログラマーが実行したい特定のコードスニペットの実行回数を示します。
timeit
モジュールの timeit.timeit()
関数を実装する方法のさまざまな例を見ていきます。
timeit
モジュールを使用して、単純なコードスニペットの実行時間を計算する
このメソッドは、トリプルクォート (''')
の間の変数にコードスニペットを定義します。
次のコードは、timeit
モジュールを使用して、単純なコードスニペットの実行時間を計算します。
import timeit
setup1 = "from math import sqrt"
code1 = """
def a():
list1 = []
for i in range(50):
list1.append(sqrt(i))
"""
print(timeit.timeit(setup=setup1, stmt=code1, number=10000))
上記のプログラムは、秒単位の実行時間として出力を提供します。この実行時間は、指定されたコードスニペットの 100 万回の反復に起因します。
また、セットアップ引数にすべての重要なインポートステートメントを含めることをお勧めします。
timeit
モジュールを使用して、2つのスニペットの実行時間を比較する
timeit
モジュールは、指定された 2つのコードスニペットの実行時間を比較するためにも使用できます。ここでは、それぞれ二分探索
と線形探索
に使用される 2つの関数を使用して、それらの実行時間を比較します。
次のコードは、timeit
モジュールを使用して、2つのスニペットの実行時間を比較します。
import timeit
# function for binary search
def b_s(mylist, find):
while len(mylist) > 0:
mid = (len(mylist)) // 2
if mylist[mid] == find:
return True
elif mylist[mid] < find:
mylist = mylist[:mid]
else:
mylist = mylist[mid + 1 :]
return False
# function for linear search
def l_s(mylist, find):
for x in mylist:
if x == find:
return True
return False
def b_time():
SETUP_CODE = """
from __main__ import b_s
from random import randint"""
TEST_CODE = """
mylist = [x for x in range(10000)]
find = randint(0, len(mylist))
b_s(mylist, find)"""
times = timeit.repeat(setup=SETUP_CODE, stmt=TEST_CODE, repeat=3, number=10000)
print("Binary search time: {}".format(min(times)))
def l_time():
SETUP_CODE = """
from __main__ import l_s
from random import randint"""
TEST_CODE = """
mylist = [x for x in range(10000)]
find = randint(0, len(mylist))
l_s(mylist, find)
"""
times = timeit.repeat(setup=SETUP_CODE, stmt=TEST_CODE, repeat=3, number=10000)
print("Linear search time: {}".format(min(times)))
if __name__ == "__main__":
l_time()
b_time()
timeit
モジュールのコマンドラインインターフェイスを使用する
コマンドラインインターフェイスで簡単な関数コードとその構文を使用して、一度に 1つずつすべての引数に取り組みましょう。
次のコードは、timeit
モジュールのコマンドラインインターフェイスを使用しています。
C:\Windows\System32>python3 -m timeit -s "from math import sqrt" -n 10000 -r 5 'a = sqrt(34532)'
ここでは、記事の最初の例と同じ機能を使用しました。
次に、ここで使用されているすべての引数をコマンドラインインターフェイスについて考えてみましょう。
timeit
:timeit
モジュールの存在と使用を指定する単純な位置引数。-s
:セットアップ引数。-n
:数値引数。-r
:繰り返される引数(オプション)。'code snippet'
:コードスニペットは、コマンドラインインターフェイスで一重引用符で囲まれて直接記述されます。
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn