比较int和float时,Python何时执行类型转换?

发布于 2021-01-29 16:35:15

为什么Python中返回True时,我比较intfloat具有相同价值的物品?

例如:

>>> 5*2 == 5.0*2.0
True
关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它不像类型转换那样简单。

    10 == 10.0委托给参数的__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__也不只是在内部执行转换。它具有100余行代码来处理浮点/整数比较,而不会出现未经检查的强制转换可能导致的舍入错误。(有些那可以简化如果C级比较例程没有还必须处理>>=<,和<=)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看