python - Python在比较int和float时什么时候进行类型转换?
问题描述
True
当我比较具有相同值的对象int
时,为什么 Python 会返回?float
例如:
>>> 5*2 == 5.0*2.0
True
解决方案
它不像类型转换那么简单。
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 级比较例程也不必处理>
、>=
、<
和,则其中一些可以简化<=
。)
推荐阅读
- google-data-studio - Google Data Studio 连接器中缺少 Google Search Console 数据(不在 GSC 本身中)
- javascript - 格式化动态列 JavaScript
- audio - 播放前 HTML5 音频长缓冲
- python - ImportError:numpy.core.multiarray 导入失败(cv2)
- prolog - SICStus Prolog sat_count/2 替换?
- r - 根据列的内容在 R 中重复行
- azure-logic-apps - 在 Azure 逻辑应用中检索 json 属性值
- python-3.x - @property - 方法调用逻辑
- php - 使用 Mailer 在生产中接收消息时出现问题
- android - 为什么片段中的生命周期范围.launch 会阻塞 UI 线程?