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

为什么在python中v*v比v**2快,python,python-3.x,operators,Python,Python 3.x,Operators,我试图测量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**

我试图测量
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函数。

x**3
x**2.5
相比,速度如何?因为乘法比求幂快。如果Python(或者底层的C数学代码,或者CPU)使用特殊大小写的正方形,或者立方体,使用乘法来实现它们,那就太好了,但显然不是这样。@Stephernauch甚至x**4与上面的
**
也有相同的结果,它并不是
pow()
函数的真正包装器。内置的
pow()
函数,并作为对
PyNumber\u Power()
的调用进行计算。是的,
PyNumberPower()
比简单的乘法慢,但是调用不会进行
**
=>
pow()
=>
PyNumberPower()
@StevenRumbalski感谢您提供的信息。您的意思是说,
**
被就地转换为字节码,即没有函数调用,还是说它被转换为对
PyNumber\u Power()
的调用,而不是
pow()