Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向集合中添加NAN时行为不一致的原因_Python_Python 3.x_Cpython_Python Internals - Fatal编程技术网

Python 向集合中添加NAN时行为不一致的原因

Python 向集合中添加NAN时行为不一致的原因,python,python-3.x,cpython,python-internals,Python,Python 3.x,Cpython,Python Internals,Python集合与NaNs()的结合存在令人费解的行为(至少对我来说是如此): 起初,我错误地假设这是==-运算符的行为,但显然不是这样,因为这两种情况都会产生False,正如预期的那样(): 我主要对这种行为的原因感兴趣。但是,如果有一种方法可以确保一致的行为,那也很高兴知道 set membership在考虑相等性检查之前,将身份检查作为短路进行(CPython源在,另请参见下面的注释) Python核心开发人员受到以下不变量的驱动: for a in container: asse

Python集合与
NaN
s()的结合存在令人费解的行为(至少对我来说是如此):

起初,我错误地假设这是
==
-运算符的行为,但显然不是这样,因为这两种情况都会产生
False
,正如预期的那样():


我主要对这种行为的原因感兴趣。但是,如果有一种方法可以确保一致的行为,那也很高兴知道

set membership在考虑相等性检查之前,将身份检查作为短路进行(CPython源在,另请参见下面的注释)

Python核心开发人员受到以下不变量的驱动:

for a in container:
    assert a in container    # this should ALWAYS be true
因此:

决定确保这些不变量是最重要的优先事项,至于NaN:哦,好吧。特殊情况不足以违反规则。有关所有血淋淋的详细信息,请参见bpo第4296期:


.Python的容器假定
=
是一个等价关系。如果不是这样,遏制的概念就会分崩离析。首先,你不应该把NaN放在一个集合中。可能相关:另请参见。
>>> float('nan') == float('nan') 
False
>>> nan = float('nan')
>>> nan == nan
False
for a in container:
    assert a in container    # this should ALWAYS be true
assert a in [a]
assert a in (a,)
assert a in {a}