当我比较具有相同值的Trueint对象时,为什么Python返回float

例如:

>>> 5*2 == 5.0*2.0
True

最佳答案

它不像类型转换那样简单。
10 == 10.0委托(delegate)给参数的__eq__方法,首先尝试(10).__eq__(10.0),然后在第一次调用返回(10.0).__eq__(10)的情况下尝试NotImplemented。它不尝试转换类型。 (从技术上讲,方法查找使用一个特殊的例程,该例程绕过实例__dict__条目和__getattribute__/__getattr__覆盖,因此,这并不等同于自己调用方法。)
int.__eq__不知道如何处理浮点数:

>>> (10).__eq__(10.0)
NotImplemented

但是float.__eq__知道如何处理整数:
>>> (10.0).__eq__(10)
True
float.__eq__也不只是在内部执行强制转换。它具有over 100 lines代码来处理浮点/整数比较,而不会出现未经检查的强制转换可能导致的舍入错误。 (如果C级比较例程不必同时处理>>=<<=,则可以简化其中的一些操作。)

关于python - 比较int和float时,Python何时执行类型转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52557054/

10-11 22:45
查看更多