In[19]: x = None
In[20]: y = "Something"
In[21]: x is None == y is None
Out[21]: False
In[22]: x is None != y is None ## What's going on here?
Out[22]: False
In[23]: id(x is None)
Out[23]: 505509720
In[24]: id(y is None)
Out[24]: 505509708
为什么Out[22]是假的?他们有不同的身份证,所以这不是身份问题。。。。你知道吗
你的
x is None != y is None
是“chained comparisons”。更典型的例子是3 < x < 9
。意思与(3 < x) and (x < 9)
相同。在你的例子中,使用操作符is
和!=
,这是:这是假的,因为
y is None
是假的。你知道吗链式表达式从左到右求值,此外,比较
is
和!=
具有相同的优先级,因此表达式的求值方式为:要更改评估顺序,您应该放置一些参数:
还要注意的是,第一个表达式
x is None == y is None
是一个侥幸心理,或者更确切地说是一个危险因素,因为如果在所需的位置放置一些paren,您将得到相同的结果。这可能就是为什么您假设顺序应该首先从is
开始,然后在第二种情况下从!=
开始。你知道吗相关问题 更多 >
编程相关推荐