Python 函数调用相对昂贵。 但是我不断遇到我希望能够以不同方式调用函数的情况,最简单的方法似乎是使用不同的调用在函数周围创建一个轻量级包装器。
是否有比调用函数的方式更pythonic和/或更有效的方式来启用更多功能?
对于一个完全人为的、过于简单的例子来说明我在问什么:
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
所以开销似乎很明显。