Python 実行時間を測定する
投稿日: 2022/07/25
更新日: 2022/07/25
更新日: 2022/07/25
タグ:
python
概要
「どっちの方が効率的なの? 」と思うことが良くあります。
そういう時は実行して比べてみましょう。
コード
wrapper を作成しておく
元の関数の返り値はいらないので1万回の実行時間を返すようにしてしまう。
import time
def execution_time(func):
def wrapper(*args, **kwargs):
time_start = time.time()
for _ in range(10000):
func(*args, **kwargs)
time_end = time.time()
diff = time_end - time_start
return diff
return wrapper
サンプル
例えば、下記のようなデータがあったとする。
これを {'key1': 1 + 100}
という dict にしたいとする。(雑)
for と map どちらの方が早いか計測してみる。
target_list = list()
for i in range(100):
target_list.append([f"key{i}", i, i * 100])
# [['key0', 0, 0], ['key1', 1, 100], ['key2', 2, 200], ...
一旦検証したい関数を作ってみる。
def case1(input):
return {v[0]: v[1]+v[2] for v in input}
def case2(input):
return dict(map(lambda v: (v[0], v[1]+v[2]), input))
この関数の返り値がともに正しいことを確認した後に、下記のように wrapper を加え、実行スクリプトを作っていざ比較。
@execution_time
def case1(input):
return {v[0]: v[1]+v[2] for v in input}
@execution_time
def case2(input):
return dict(map(lambda v: (v[0], v[1]+v[2]), input))
def run(input):
case1_time_sum = 0
case2_time_sum = 0
case1_time_sum += case1(input)
case2_time_sum += case2(input)
case1_time_sum += case1(input)
case2_time_sum += case2(input)
print(f"case1_time_sum: {case1_time_sum}")
print(f"case2_time_sum: {case2_time_sum}")
run(target_list)
# case1_time_sum: 0.26724958419799805
# case3_time_sum: 0.38831400871276855
確認完了!