为什么 v*v 在 python 中比 v**2 快
Why v*v is faster than v**2 in python
我试图衡量 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
因为 *
是一种深深植根于处理器中的算术运算,而 **
是 pow
函数的包装器。
使用 k ** 2
比 k * k
有更多开销,因为 python 将在内部调用 pow 函数。
我试图衡量 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
因为 *
是一种深深植根于处理器中的算术运算,而 **
是 pow
函数的包装器。
使用 k ** 2
比 k * k
有更多开销,因为 python 将在内部调用 pow 函数。