长方程还是分解方程Python中什么更快?

长方程还是分解方程Python中什么更快?,python,optimization,equation,Python,Optimization,Equation,假设我有以下代码: 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

假设我有以下代码:

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

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

没有测量就无法判断。幸运的是,Python附带了一个能做到这一点的工具

只需通过timeit.timeit运行这两个函数,它就会告诉您哪一个更快

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

您可能需要将2*math.pi替换为常数PI2:

由于函数调用代价高昂,您应该将此代码内联到asd中


PS:我希望实际代码中的函数名更具可读性:当我在某人的代码中看到自闭症时,我感到一阵强烈的愤怒-

没有测量就无法判断。幸运的是,Python附带了一个能做到这一点的工具

只需通过timeit.timeit运行这两个函数,它就会告诉您哪一个更快

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

您可能需要将2*math.pi替换为常数PI2:

由于函数调用代价高昂,您应该将此代码内联到asd中


PS:我希望实际代码中的函数名更具可读性:当我在某人的代码中看到自闭症时,我感到一阵强烈的愤怒-

许多人建议使用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

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

正如许多人建议使用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

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

使用测试代码段的python性能。如果有任何差异,则差异较小,并且取决于解释器是否可以在一个大语句中找到优化,而在单独的语句中找不到优化。。。如果您有大量的这些复杂计算,您是否考虑过使用numpy?…并使用来更好地了解代码中发生了什么。@JonClements:任何性能差异都将取决于局部变量的赋值。请随意将两个版本的计时结果作为答案发布:附带说明:这些不是方程。而是在函数中计算的表达式。使用测试代码段的python性能。如果有任何差异,则差异较小,并基于解释器是否可以在一个大语句中找到优化,而在单独的语句中找不到优化。。。如果您有大量的这些复杂计算,您是否考虑过使用numpy?…并使用来更好地了解代码中发生了什么。@JonClements:任何性能差异都将取决于局部变量的赋值。请随意将两个版本的计时结果作为答案发布:附带说明:这些不是方程。相反,在function.asd中计算的表达式可以是平均标准偏差:asd只是用来简化它。我使用了timeit,虽然我不太确定差异有多大,但还是有差异的。1行ask给出1.15374980281118132,而细分ask给出1.2557689225396658。用常数替换math.pi后,我得到1.1223440587650901。非常感谢,这将有望提高我的代码速度:asd可能是平均标准偏差asd只是用来简化它。我使用了timeit,虽然我不太确定差异有多大,但还是有差异的。1行ask给出1.15374980281118132,而细分ask给出1.2557689225396658。用常数替换math.pi后,我得到1.1223440587650901。非常感谢,这将有望提高我的代码速度:谢谢,尽管我刚刚运行了定义文件definitions.py,然后在shell中输入了t=timeit.Timer'definations.asd8,0.6','import definations',然后是t.timeit,没有下划线也能正常工作:谢谢,虽然我只是运行了我的定义文件definitions.py,然后在shell中放置了t=timeit.Timer'definations.asd8,0.6','import definations',然后是t.timeit,它似乎在没有下划线的情况下也能正常工作: