Python的set与NaN
s(here live)的结合有一个令人费解的行为(至少对我来说):
>>> float('nan') in {float('nan')} # example 1
False
>>> nan = float('nan') # example 2
>>> nan in {nan}
True
一开始,我错误地假设这是==
-操作符的行为,但情况显然不是这样,因为这两种情况都会产生False
预期的结果(here live):
>>> float('nan') == float('nan')
False
>>> nan = float('nan')
>>> nan == nan
False
我主要对这种行为的原因感兴趣。但如果有一种方法可以确保行为的一致性,那也很高兴知道!你知道吗
set membership在考虑相等性检查之前做一个短路身份检查(CPython源在^{} 中,另请参见下面的注释^{} )。你知道吗
Python核心开发人员的动机是这些不变量:
因此:
决定确保这些不变量是最重要的优先事项,至于NaN:oh。特殊情况不足以打破规则。有关所有血淋淋的细节,请参见bpo问题4296:
Python assumes identity implies equivalence; contradicts NaN。你知道吗
相关问题 更多 >
编程相关推荐