我试着测量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函数.