我想这件事已经有一段时间了。正如题目所说,哪个更快,实际功能还是简单地提高到一半功率?
更新
这不是一个过早优化的问题。这只是一个关于底层代码如何实际工作的问题。Python代码的工作原理是什么?
我给Guido van Rossum发了一封邮件,因为我真的很想知道这些方法的区别。
There are at least 3 ways to do a square root in Python: math.sqrt, the '**' operator and pow(x,.5). I'm just curious as to the differences in the implementation of each of these. When it comes to efficiency which is better?
pow and ** are equivalent; math.sqrt doesn't work for complex numbers, and links to the C sqrt() function. As to which one is faster, I have no idea...
下面是一些计时(Python2.5.2,Windows):
这个测试表明
x**.5
比sqrt(x)
稍快。对于Python3.0,结果正好相反:
math.sqrt(x)
总是比另一台机器(Ubuntu、Python 2.6和3.1)上的x**.5
快:你到底在表演多少平方根?你想用Python编写一些3D图形引擎吗?如果不是,那为什么要使用比容易阅读的代码更神秘的代码呢?时间差是任何人都不会注意到的,在任何我可以放弃的申请。我真的不想放下你的问题,但你似乎有点过分过早的优化。
根据评论,我更新了代码:
现在
math.sqrt
函数直接位于一个局部参数中,这意味着它具有最快的查找速度。更新:python版本似乎很重要。我曾经认为
timeit1
会更快,因为当python解析“I**.5”时,它从语法上知道要调用哪个方法(__pow__
或某个变量),所以它不必像math.sqrt
变量那样经历查找的开销。但我可能错了:Python2.5:0.191000对0.224000
Python 2.6:0.195000对0.139000
同时,psyco似乎处理得更好:
Python 2.5+Psyco 2.0:0.109000对0.043000
Python 2.6+Psyco 2.0:0.128000对0.067000
在机器上生成的表结果:
要复制结果:
pip install tox
tox.ini
文件从目录中运行tox
。相关问题 更多 >
编程相关推荐