为什么 v*v 在 python 中比 v**2 快

Why v*v is faster than v**2 in python

我试图衡量 v*vv**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

因为 * 是一种深深植根于处理器中的算术运算,而 **pow 函数的包装器。

使用 k ** 2k * k 有更多开销,因为 python 将在内部调用 pow 函数。