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
Run Code Online (Sandbox Code Playgroud)
为什么Out [22]错了?他们有不同的ID,所以这不是身份问题....
链式表达式从左到右进行评估,此外,比较is并!=具有相同的优先级,以便将表达式计算为:
(x is None) and (None!= y) and (y is None)
#---True----|------True-----|--- False---|
#-----------True------------|
#------------------False-----------------|
Run Code Online (Sandbox Code Playgroud)
要改变评估顺序,你应该做一些改变:
>>> (x is None) != (y is None)
True
Run Code Online (Sandbox Code Playgroud)
另请注意,第一个表达式x is None == y is None是侥幸,或者更确切地说是红鲱鱼,因为如果您将一些parens放在所需的位置,您将得到相同的结果.这可能就是为什么你假设订单应该从第is一个开始,然后!=在第二个案例中开始.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |