Python pow**结果

mll*_*mll 4 python python-2.7

为什么此示例中的内置运算符4**(1/2)(这是一个平方根运算)返回结果1而不是2应该预期的?如果不会返回一个可接受的结果,它应该会出错,但Python继续工作而没有任何崩溃.至少在Python 2.7.4 64位分发中.

它也会在数学函数中发生,pow(4,1/2)它返回1时没有错误.

相反,在执行4**(0.5)此操作时返回的结果2.0是正确的,尽管它混合了整数和浮点数而没有任何警告.pow也是如此.

对此行为有何解释?他们会被视为错误吗?

Mar*_*ers 9

1/2使用floor division,而不是浮点除法,因为两个操作数都是整数:

>>> 1/2
0
Run Code Online (Sandbox Code Playgroud)

使用浮点值,或使用from __future__ import division切换到/操作符始终使用浮点除法的Python 3行为:

>>> 1/2.0
0.5
>>> 4**(1/2.0)
2.0
>>> from __future__ import division
>>> 1/2
0.5
>>> 4**(1/2)
2.0
Run Code Online (Sandbox Code Playgroud)