Works by ...

プログラミング関連でメモする

【python】関数呼び出しとメソッド呼び出しの速度を比較する

前々から気になっていた、関数呼び出しとメソッド呼び出しの速度比較の結果をやってみた。 あまり厳密ではないけれど・・・

import time
import numpy as np


# 適当なクラス
class Hoge:
    # 適当なメソッド
    def hoge(self):
        print ('hoge')


# 適当な関数(Hogeクラスのメソッドと機能は同じとする)
def hoge():
    print ('hoge')


# 100000回の呼び出しを1000回試行
def profile(func):
    results = []

    for j in xrange(1000):

        start = time.clock()

        for i in xrange(10000):
            func()

        results.append(time.clock() - start)

    return results


# オブジェクトの生成時間は含めない
obj = Hoge()

# 各処理の実行時間リスト
func_pt = profile(hoge)
method_pt = profile(obj.hoge)

print 'function process time average : {}s'.format(np.mean(func_pt))
print 'method process time average : {}s'.format(np.mean(method_pt))

結果

function process time average : 0.020806763s
method process time average : 0.021944795s

結果だけ見ると、関数呼び出しの方が若干速い。 ぱっと見中身が同じ関数オブジェクトを同じように呼び出し処理しているんだけれど、もしかしたらメモリアクセスの仕方等に違いがあるのかも。