Python 実行時間を測定する

投稿日: 2022/07/25
更新日: 2022/07/25
シェア:

URL copied!


概要

「どっちの方が効率的なの? 」と思うことが良くあります。
そういう時は実行して比べてみましょう。

コード

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

確認完了!