【发布时间】:2019-01-08 13:18:29
【问题描述】:
我试图测量v*v 和v**2 之间的性能。结果就像下面这样
# test was generated with randint(1, 999)
# 0.10778516498976387
print(timeit.timeit("sum([item*item for item in test])", number=10000, setup="from __main__ import test"))
# 0.35526178102009
print(timeit.timeit("sum([item**2 for item in test])", number=10000, setup="from __main__ import test"))
我开始这个实验的原因是我不想在列表理解中做同样的操作。
由于运算符出现一次,(例如(item-3) * (item*3) 和(item-3)**2)我认为(item-3)**2 会比(item-3)*(item-3) 快。但情况完全相反。
谁能解释一下原因?
[+]我用的是python3.6.0
【问题讨论】:
-
速度与
x**3或x**2.5相比如何? -
因为乘法比求幂快。如果 Python(或底层 C 数学代码,或 CPU)使用特殊情况的正方形和立方体,使用乘法来完成它们会很好,但显然它没有。
-
@StephenRauch 即使 x**4 与上面的结果相同
标签: python python-3.x operators