前々から気になっていた、関数呼び出しとメソッド呼び出しの速度比較の結果をやってみた。 あまり厳密ではないけれど・・・
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
結果だけ見ると、関数呼び出しの方が若干速い。 ぱっと見中身が同じ関数オブジェクトを同じように呼び出し処理しているんだけれど、もしかしたらメモリアクセスの仕方等に違いがあるのかも。