Python Timeit() の例

⚡ スマートサマリー

Python Timeit() は、短いコードスニペットを複数回実行し、その最小実行時間を返すことで、実行時間を計測します。timeit、repeat、default_timer メソッドをサポートしており、スクリプトまたはコマンドラインから実行できます。

  • 豪華<XNUMXxXNUMXF><XNUMXxXNUMXF><XNUMXxBXNUMX><XNUMXxBXNUMX>️ Timeitの定義: コードスニペットの実行時間を測定し、複数回の実行における最小値を返します。
  • 🧩 パラメーター: stmt、setup、timer、numberによって、何を実行するか、どのくらいの頻度で実行するかが制御されます。
  • 🔁 メソッド: timeit()、repeat()、およびdefault_timer()は、それぞれ異なるタイミングオプションを提供します。
  • 💻 コマンドライン: -n、-r、-sなどのフラグを付けて、python -m timeitを実行します。
  • 使用する理由: ガベージコレクションを無効にし、オペレーティングシステムごとに最も正確なタイマーを選択します。

Python タイムイット()

何ですか Python Timeit()?

Python タイムイット() は、 Python ライブラリは、与えられたコードスニペットの実行時間を測定します。 Python ライブラリはコード ステートメントを 1 万回実行し、指定されたコード スニペットのセットからかかる最小時間を提供します。 Python timeit() は、コードのパフォーマンスをチェックするのに役立つ便利なメソッドです。

構文

timeit.timeit(stmt, setup,timer, number)

技術パラメータ

  • stmt: これにより、実行時間を測定するコードが取得されます。 デフォルト値は「パス」です。
  • : stmt の前に実行する必要があるセットアップの詳細が含まれます。デフォルト値は「pass」です。
  • タイマー: これにはタイマー値が含まれます。timeit() にはすでにデフォルト値が設定されているため、無視できます。
  • : ここで指定された番号に従って stmt が実行されます。 デフォルト値は 1000000 です。

timeit() を使用するには、以下に示すようにモジュールをインポートする必要があります。

import timeit

最初の例

timeit() 関数の簡単な例を次に示します。

Code 例

# testing timeit()
import timeit
print(timeit.timeit('output = 10*5'))

出力:

0.06127880399999999

単純なコード ステートメントの実行時間の出力 = 10*5 を示す単純な例を見てきました。実行にかかる時間は 0.06127880399999999 です。

Pythonコード内の複数行のタイミング

timeit.timeit() で複数行のコードを実行するには、行をセミコロンで区切るか、コードを三重引用符で囲んだ文字列として囲むという 2 つの方法があります。

その仕組みを示す例を次に示します。

例 1: セミコロンの使用

import timeit
print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))

出力:

The time taken is  0.137031482

例 2: 三重引用符の使用

import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module))

出力:

C:\pythontest>python testtimeit.py
The time taken is  0.182619178

timeit – メソッド

ここでは 2 つの重要な timeit メソッドを紹介します

timeit.default_timer() : 実行時にデフォルトの時間を返します。

timeit.repeat(stmt, セットアップ, タイマー, リピート, 数値) : timeit() と同じですが、repeat では、指定された繰り返し回数だけ timeit() が呼び出されます。

プログラム例1

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.timeit(stmt=testcode, setup=import_module))

出力:

0.46715912400000004

default_timer() の例

# testing timeit()

import timeit
import random

def test():
    return random.randint(10, 100)

starttime = timeit.default_timer()
print("The start time is :",starttime)
test()
print("The time difference is :", timeit.default_timer() - starttime)

出力:

The start time is : 0.220261875
The time difference is : 0.0004737320000000045

例 3: timeit.repeat()

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module, repeat=5))

出力:

 [0.43638873, 0.5040939680000001, 0.5069179909999999, 0.3943449330000002, 0.3546886979999999]

timeit.repeat() 関数は timeit.timeit() 関数と同様に機能しますが、唯一の違いは、repeat 引数を受け取り、繰り返し数に応じた値を含む配列形式で実行時間を返します。

コマンドラインインターフェース内でタイミング関数 timeit.timeit() を実行する

コマンドラインの timeit() 内で関数を実行する構文は次のとおりです。

python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [code statement ...]

コマンドラインパラメータ:

  • -n N: コードを実行する回数。
  • -r N: timeit() 関数を繰り返す回数
  • -s S: コード実行前に実行されるセットアップの詳細が含まれます。
  • -t: このために、time.time() を利用できます。
  • -c: このために、time. Clock() を利用できます。
  • -h: ヘルプ用
  • コードステートメント: コードの詳細。

例:

C:\pythontest>python -m timeit -s 'text="hello world"'
20000000 loops, best of 5: 13.1 nsec per loop

コマンドライン内で実行できる別の方法は次のとおりです。

例:

>>> import timeit
>>> print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))
The time taken is  0.15048536300000137
>>>

なぜtimeit()は実行時間を測定するのに最適な方法なのでしょうか? Python コード?

timeit() が実行時間を測定する最良の方法であると考える理由をいくつか示します。

  • コード ステートメントはデフォルト値である 1 万回実行され、そこから最小所要時間が返されます。 time()関数に引数の数値を設定することで、1万を増減することもできます。
  • テスト実行中は、time()関数により毎回ガベージコレクションが無効になります。
  • timeit()は、使用しているオペレーティングシステムに応じて内部的に正確な時間を取得します。たとえば、time.clock()を使用します。 Windows オペレーティング システムと、Mac および Linux の time.time()。

よくあるご質問

timeit.timeit() は、指定された回数だけステートメントを実行し、合計時間を1つ返します。timeit.repeat() は、その計測全体を複数回実行し、結果のリストを返すので、最適な結果を選択できます。

timeitは計測中にガベージコレクションを無効にするため、バックグラウンドでのクリーンアップ処理が計測時間を歪めることはありません。これにより、結果の一貫性と比較可能性が向上し、テスト対象のコードスニペットの実行時間のみに焦点を当てることができます。

stmt文字列内では、セミコロンでステートメントを区切るか、三重引用符を使用して複数行の文字列を渡すことができます。関数は、setupで定義し、stmtから呼び出します。

AI はコードをプロファイリングし、遅いループやコストのかかる呼び出しを特定し、ベクトル化された代替案や組み込みの代替案を提案し、より優れたデータ構造を推奨することができます。ping 開発者は、timeitが最も大きなボトルネックを示している箇所に最適化の焦点を当てます。

はい。コードスニペットとそのtimeitの結果が与えられると、AIはリスト内包表記、ジェネレータ式、ライブラリ関数などの書き換え案を提案します。その後、timeitを再実行して、改善が実際に起こっていることを確認できます。