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

我试着测量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"))

我开始这个实验的原因是我不想在列表理解中做同样的操作.

由于运算符出现一次,(例如,(项目-3)*(项目* 3)和(项目-3)** 2)我认为(项目-3)** 2将比(项目-3)更快*(项目-3).但这完全相反.

有谁能解释为什么?

[]我使用的是python3.6.0

解决方法:

因为*是深度植根于处理器的算术运算,**是pow函数的包装器.

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

上一篇:Python有三元条件运算符吗?


下一篇:c# – 为什么有赋值运算符(&=,=)但没有非赋值运算符(&,)用于短基元?