python“;是";返回True,但返回“True”==&引用;返回False

python“;是";返回True,但返回“True”==&引用;返回False,python,numpy,comparison,Python,Numpy,Comparison,只要“is”返回True,“==”就不应该返回True吗 In [101]: np.NAN is np.nan is np.NaN Out[101]: True In [102]: np.NAN == np.nan Out[102]: False In [103]: np.NaN == np.nan Out[103]: False In [104]: np.NaN == np.NAN Out[104]: False 编辑: float的3个表达式是旧版本的遗留表达式还是有其他用法?否,

只要“is”返回True,“==”就不应该返回True吗

In [101]: np.NAN is np.nan is np.NaN
Out[101]: True

In [102]: np.NAN == np.nan 
Out[102]: False

In [103]: np.NaN == np.nan
Out[103]: False

In [104]: np.NaN == np.NAN
Out[104]: False
编辑: float的3个表达式是旧版本的遗留表达式还是有其他用法?

否,不适用于。您已找到其中一个例外。根据NaN的理论,NaN不等于任何东西,甚至不等于它自己:

与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果

不仅numpy的行为是这样的:

>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
任何根据IEEE标准实现浮点运算的编程语言都将如此

多个拼写与名称的常用大写字母相匹配。它是一个非数字的缩写,不同的人对缩写的大写方式不同

对于同一个对象,
is
始终将是
True
,但是
=
甚至不能保证返回布尔值。从:

按照惯例,将返回
False
True
以进行成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在
if
语句的条件下),Python将对该值调用
bool()
,以确定结果是真还是假


浮点标准(IEEE 754)要求NaN值的任何比较结果都不相等。这对于声称实现IEEE 754的任何编程语言都是通用的,而不仅仅是Python

另见维基百科。

引用

numpy中定义的特殊值:nan,inf

NaNs可以用作穷人的面具(如果你不在乎 原值为(美元)

注意:不能使用相等性来测试NAN。例如:

np.nan==np.nan总是假的!改用特殊的numpy函数。假的


欢迎来到IEEE 754。
NaN
无法与任何东西相比,您需要为我的所有朋友使用
np.isnan
+1;)希望我能为“但是==甚至不能保证返回一个布尔值”问题+2,顺便说一句,在这种情况下,
\uuuuuueq\uuuuu
建议不要返回布尔值吗?@zhangxaochen:SQLAlchemy返回查询过滤器对象,例如。Numpy也做类似的事情,IIRC。和'NaN','NaN','NaN'只是为了兼容性,对吗?它们是为了匹配任何拼写。Python
float
也做同样的事情。