我试图衡量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
答案 0 :(得分:5)
由于*
是深深植根于处理器中的算术运算,而**
是pow
函数的包装器。
使用k ** 2
比k * k
的开销更大,因为python会在内部调用pow函数。