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 级比较例程也不必处理、、 和>
,那么其中一些可以简化。)>=
<
<=
归档时间: |
|
查看次数: |
3005 次 |
最近记录: |