为什么“假是假的”是“真”呢?

为什么在Python中这样评估:

>>> False is False is False True 

但是当用括号试图performance如预期的时候:

 >>> (False is False) is False False 

链接操作符如a is b is c等于a is b and b is c

所以第一个例子是False is False and False is False ,它的计算结果是True and True ,计算结果为True

括号会导致一个评估的结果与下一个variables进行比较(如你所期望的那样),所以(a is b) is c比较a is bc

引用Python官方文档 ,

forms上,如果abc ,…, yz是expression式, op1op2 ,…, opN是比较运算符,则a op1 b op2 c ... y opN z相当于a op1 b and b op2 c and ... y opN z ,除了每个expression式最多被评估一次。

所以, False is False is False评为

 (False is False) and (False is False) 

第二个False is Falseexpression式在原始expression式中使用第二个False ,可以有效地转化为

 True and True 

这就是为什么第一个expression式是True

但在第二个expression式中,评估顺序如下。

 (False is False) is False 

其实是

 True is False 

这就是为什么结果是False

你的表情

 False is False is False 

被视为

 (False is False) and (False is False) 

所以你明白了

 True and True 

并评估为True

您也可以使用这种链接与其他操作员。

 1 < x < 10 

我认为False is False is False意思(False is False) and (False is False) ,但是(False is False) is False意思是:

 >>> (False is False) is False False >>> a_true = (False is False) >>> a_true True >>> a_true is False False 

所以,你会得到结果。

 >>> False is False is False True 

在这种情况下,每个False对都被评估。 评估前两个False,如果为True ,则评估第二个和第三个False并返回结果。

在这种情况下, False is False is False ,相当于2个命令的结果, False is False