当我比较具有相同值的True
和int
对象时,为什么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/