【发布时间】:2010-09-24 12:41:58
【问题描述】:
我一直在想这个问题。正如标题所说,哪个更快,实际功能还是简单地提高到一半?
更新
这不是过早优化的问题。这只是底层代码如何实际工作的问题。 Python 代码的工作原理是什么?
我给 Guido van Rossum 发了一封电子邮件,因为我真的很想知道这些方法的区别。
我的邮箱:
在 Python 中至少有 3 种求平方根的方法:math.sqrt、 '**' 运算符和 pow(x,.5)。我只是好奇 其中每一项的实施。当谈到效率时 更好吗?
他的回应:
pow 和 ** 是等价的; math.sqrt 不适用于复数, 并链接到 C sqrt() 函数。至于是哪一个 更快,我不知道...
【问题讨论】:
-
Guido 回复电子邮件真是太棒了。
-
埃文,我很惊讶我收到了回复
-
我不认为这是一个坏问题。例如,x * x 比 x ** 2 快了整整 10 倍。在这种情况下,可读性是一个折腾,那么为什么不采用快速的方式呢?
-
凯西,我和你一起讨论“过早的优化”问题。 :) 在我看来,您的问题不像是过早的优化:任何变体都不会破坏您的代码。当您选择 pow() 而不是 math.sqrt() 时,更多的是更好地了解您所做的事情(就执行时间而言)。
-
这不是过早的优化,而是避免过早的悲观化(参考编号 28,C++ 编码标准,A.Alexandrescu)。如果
math.sqrt是一个更优化的例程(事实上)并且更清楚地表达了意图,那么它应该始终优于x**.5。知道您编写的内容并不是过早的优化,而是选择了更快且代码更清晰的替代方案。如果是这样,您需要同样充分地论证为什么您会选择其他替代方案。
标签: python performance