Python函数调用是相对的expensive.但我一直在遇到一些情况,我希望能够以不同的方式调用函数,最简单的方法似乎是在不同的函数周围创建一个简单的包装器呼叫。Python Effecient Wrappers
是否有更多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?
正因为如此,这timeit:
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
所以开销似乎是明显的。
如果你只想*添加*参数,你可以用'functools.partial()',它采用C避免压栈流行。 – 2013-03-06 22:46:38