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

时间:2018-08-01 04:23:48

标签: python python-3.x operators

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

1 个答案:

答案 0 :(得分:5)

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

使用k ** 2k * k的开销更大,因为python会在内部调用pow函数。