gau*_*av 8 python floating-point int python-3.x python-internals
为什么Python中返回True时,我比较int和float具有相同价值的物品?
例如:
>>> 5*2 == 5.0*2.0
True
Run Code Online (Sandbox Code Playgroud)
它不像类型转换那么简单。
10 == 10.0委托给参数的__eq__方法,(10).__eq__(10.0)首先尝试,然后(10.0).__eq__(10)如果第一次调用返回NotImplemented。它不会尝试转换类型。(从技术上讲,方法查找使用一个特殊的例程来绕过实例__dict__条目和__getattribute__/__getattr__覆盖,所以它并不完全等同于自己调用方法。)
int.__eq__ 不知道如何处理浮点数:
>>> (10).__eq__(10.0)
NotImplemented
Run Code Online (Sandbox Code Playgroud)
但float.__eq__知道如何处理整数:
>>> (10.0).__eq__(10)
True
Run Code Online (Sandbox Code Playgroud)
float.__eq__也不只是在内部执行演员表。它有100 多行代码来处理 float/int 比较,而没有未经检查的强制转换可能引入的舍入错误。(如果 C 级比较例程也不必处理、、 和>,那么其中一些可以简化。)>=<<=