python - Python:'inf 是 inf',但 '-inf 不是 -inf'?
问题描述
蟒蛇 3.7
在编写最大值的搜索代码时,我遇到了负无穷大的奇怪行为。 有人可以解释为什么这种行为吗?
>>> inf = float('inf')
>>> inf is inf
True
>>> (-inf) is (-inf)
False
而且我已经意识到使用==
比较更好,但我对上述问题的答案很感兴趣。
解决方案
inf
是一个变量,绑定到一个特定的对象。任何对象is
本身,所以inf is inf
.
-inf
是一个表达式。它进行数学运算,并生成一个值浮点负无穷大的对象。Python 没有承诺 this 是否与具有该值的任何其他对象相同。在您的情况下,两个评估-inf
碰巧产生了不同的对象。
同样,没有关于会产生什么的承诺。-inf is -inf
当前的 CPython 实现恰好始终产生 False。PyPy 的原始处理产生 True。不同的 Python 版本或实现可能会根据当前的内存压力不一致地生成 True 或 False,或者您是否将其作为脚本运行或以交互方式运行,或任何其他因素。CPython 本身已经存在对象标识在脚本中或交互方式中不同的情况;例如,这个:
x = 1000
y = 1000
print(x is y)
根据您是否以交互方式运行它,在当前 CPython 实现中打印不同的东西。
推荐阅读
- c# - 如何使用 RegEx.Replace 替换 . 和 - 到以下日期字符串 01.04-2016 上的 /
- mysql - 无法处理具有特殊字符的代码
- css - 如何使用具有可变大小图像且每行末尾没有白色间隙的包装制作网格
- php - 如果文件已经存在,如何在文件名时创建验证
- sql - SQL ORACLE,差异
- java - 我的程序不会访问我的二维数组的第二行。ArrayIndexOutofBoundsException
- javascript - Heroku 错误:ENOENT:没有这样的文件或目录,打开“.env”
- php - Sweetalert 在 php 中删除之前确认
- tableau-api - 将 excel 转换为 Tableau 语法
- c# - 此行将用于在 windowforms 中打开文件以及如何使用此行?