Pythonで関数ごとの実行時間を計測するには?timeモジュールとtimeitの使い方
Pythonでプログラム全体や特定の関数の実行時間を測定したい場合、標準ライブラリのtimeモジュールが便利です。従来はtime.clock()やtime.time()が使われてきましたが、現在ではより高精度なtime.perf_counter()の使用が推奨されています。これらの関数を計測したい処理の前後に配置することで、その部分にかかった時間を簡単に取得できます。
基本的な計測方法
以下は、処理の開始時刻と終了時刻の差分から経過時間を求めるシンプルな例です。
import time
t0 = time.perf_counter()
print("Hello")
t1 = time.perf_counter()
print("Time elapsed:", t1 - t0) # 経過秒数(浮動小数点数)
出力結果
Time elapsed: 0.0009403145040156798
なお、Python 3.8以降ではtime.clock()は削除されているため、新しく書くコードではtime.perf_counter()(高精度な経過時間の計測用)またはtime.process_time()(CPU時間の計測用)を使用しましょう。
timeitモジュールによる統計的な計測
より正確なパフォーマンス分析を行いたい場合は、timeitモジュールがおすすめです。このモジュールは対象のコード断片を複数回実行し、最も短かった実行時間を報告してくれます。一時的なシステム負荷などのノイズの影響を受けにくく、信頼性の高いベンチマークが可能です。
def f(x):
return x * x
import timeit
timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=100000)
出力結果
[2.0640320777893066, 2.0876040458679199, 2.0520210266113281]
timeit.repeat()はデフォルトで3回の繰り返しを実行し、それぞれの結果をリストとして返します。返されたリストの中から最小値を採用するのが、一般的なベストプラクティスとされています。
まとめ
手軽に一度だけ計測したい場合はtime.perf_counter()、統計的に信頼できるベンチマークを取りたい場合はtimeitモジュールという使い分けが効果的です。用途に応じて適切なツールを選択し、ボトルネックの特定やパフォーマンス改善に役立てましょう。
-
Pythonで関数名を文字列として取得する方法を解説
Pythonで関数名を文字列として取得するには?Pythonでは、すべての関数に __name__ という特殊な属性が自動的に付与されています。この属性にアクセスすることで、関数名を文字列として簡単に取得できます。基本的な使い方以下の例を見てみましょう。まず、シンプルな関数を定義し、その __name__ 属性を出力します。def some_func(): return 0 print(some_func.__name__)このコードを実行すると、次のような出力が得られます。some_func活用シーンの例この __name__ 属性は、以下のような場面で特に役立ちます。デバッグやロ
-
Pythonで再帰関数を使って階乗を求める方法
再帰(リカージョン)とは、関数が自分自身を呼び出すことで問題を解決するプログラミング手法です。階乗の計算は、この再帰処理の仕組みを学ぶのに最適な題材として広く知られています。正の整数 n の階乗(n!)は、1 から n までのすべての整数を掛け合わせた値です。たとえば、6 の階乗は次のように計算されます。6! = 6 × 5 × 4 × 3 × 2 × 1 = 720再帰を使った階乗計算のコード例次のコードでは、n = 6 と n = 15 の場合の階乗を計算しています。def factorial(n): if n == 1: return 1 else: