1

假设我有以下代码:

qwe = 1.5    

def jkl(l):
    result = 2*(math.pi/l)
    return result

def asd(b, l):
    result = (abs(((jkl(l)**2)*(qwe**2))-(b**2))**(0.5)
    return result

现在,在 asd def 中使用那个长方程是否更有效,或者如果将其分解,计算速度会更快:

def asd(b, l):
    z1=jkl(l)**2
    z2=qwe**2
    z3=b**2
    z4=(z1*z2)-z3
    z5=abs(z4)
    z6=z5**(0.5)
    return z6

由于我的代码可能会被第三方使用和修改,因此分解的示例很容易理解,但是创建所有这些函数内变量是否会比在一行中完成所有操作更慢?它需要尽可能快,因为该函数将被其他更复杂的函数调用数百次。

4

2 回答 2

4

没有测量就无法判断。幸运的是,Python 附带了可以做到这一点的模块timeit

只需运行这两个函数timeit.timeit(),它就会告诉你哪个更快。

我的直觉是紧凑的单行形式更快,但我可能错了。

你可能想2*math.pi用一个常量替换PI2

PI2 = 2*math.pi
def jkl(l): return PI2 / l

并且由于函数调用很昂贵,因此您应该将此代码内联到asd()

PS:希望真实代码中的函数名更具可读性。:-) 当我看到asd()某人的代码时,我感到一阵强烈的愤怒。:-)

于 2012-11-16T09:47:54.510 回答
1

正如许多人建议使用 python 的timeit模块来测试速度:

print timeit.timeit('asd(2,2)','from __main__ import asd')
print timeit.timeit('asd_split(2,2)','from __main__ import asd_split')

>>>0.93675494194
>>>1.0719628334

正如预期的那样,非拆分版本似乎更快。

于 2012-11-16T10:02:52.907 回答