为什么这个例子中的内置运算符4**(1/2)
(它是一个平方根运算)作为结果1
而不是2
预期的那样返回?如果不返回可接受的结果,它应该会引发错误,但 Python 会继续工作而不会发生任何崩溃。至少在 Python 2.7.4 64 位发行版中。
它也发生在没有错误pow(4,1/2)
返回的数学函数上。1
相反,当4**(0.5)
它返回2.0
正确的结果时,尽管它混合了整数和浮点数而没有任何警告。pow 也是如此。
对这种行为有什么解释吗?他们应该被视为错误吗?
为什么这个例子中的内置运算符4**(1/2)
(它是一个平方根运算)作为结果1
而不是2
预期的那样返回?如果不返回可接受的结果,它应该会引发错误,但 Python 会继续工作而不会发生任何崩溃。至少在 Python 2.7.4 64 位发行版中。
它也发生在没有错误pow(4,1/2)
返回的数学函数上。1
相反,当4**(0.5)
它返回2.0
正确的结果时,尽管它混合了整数和浮点数而没有任何警告。pow 也是如此。
对这种行为有什么解释吗?他们应该被视为错误吗?
1/2
使用地板除法,而不是浮点除法,因为两个操作数都是整数:
>>> 1/2
0
使用浮点值,或使用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
1/2
给出0.5
作为答案,但由于它是 anint/int
它返回 anint
因此它截断 the.5
并返回0
。为了得到float
结果,其中一个数字必须是float
。因此,您必须这样做:
>>> 4 ** (1.0/2)
2.0
这很好用,你也可以试试这个:
>>> math.pow(4,1.0/2)
2.0
或者你也可以试试这个:
>>> math.sqrt(4)
2.0