Python関数呼び出しは比較的高価です。 しかし、さまざまな方法で関数を呼び出せるようにしたい場合があります。最も簡単な方法は、さまざまな呼び出しで関数の周りに軽いラッパーを作成することです。
関数を呼び出す方法以上のものを有効にするための、よりPython的および/またはより効率的な方法はありますか?
私が求めていることを説明する、完全に考案された、過度に単純な例については、次のようになります。
from math import sqrt
from collections import namedtuple
Point = namedtuple('Point', 'x y')
def distFunc(x1, y1, x2, y2):
return sqrt((x1-x2)**2 + (y1-y2)**2)
def pointDistFunc(p1, p2):
return distFunc(p1.x, p1.y, p2.x, p2.y)
pointDistFuncを書くためのより良い方法はありますか?
そのまま、今回は:
p1 = Point(1, 1)
p2 = Point(100, 100)
if __name__ == '__main__':
import timeit
print(timeit.timeit("distFunc(1, 1, 100, 100)", setup="from __main__ import distFunc"))
print(timeit.timeit('pointDistFunc(p1, p2)', setup= 'from __main__ import pointDistFunc, p1, p2'))
与える:
0.392938508373
0.977704155415
したがって、オーバーヘッドが目立つようです。