有关Python3中的身份和布尔值的问题

时间:2019-10-09 15:57:17

标签: python boolean identity

我对python中的身份有疑问,我是python的初学者,我读过一些有关“ is”关键字和“ is not”的课程。而且我不明白为什么操作“ False is not True不是True不是True不是False is True”在python中等于False吗?对我来说,此操作必须返回True。

3 个答案:

答案 0 :(得分:3)

Python chains comparisons

  

通常,如果a, b, c, …, y, z是表达式,而op1, op2, …, opN是比较运算符,则a op1 b op2 c ... y opN z等效于a op1 b and b op2 c and ... y opN z,除了每个表达式最多可计算一次。

您的表情是:

False is not True is not True is not False is not True

哪个会成为:

(False is not True) and (True is not True) and (True is not False) and (False is not True)

等同于:

(True) and (False) and (True) and (True)

哪个是False

答案 1 :(得分:2)

is身份有关。

当您问if x is y时,您实际上是在问 xy是同一个对象吗? (请注意,这与 xy的值相同吗?是一个不同的问题。)

同样,当您问if x is not y时,您实际上是在问 xy是不同的对象吗?

专门针对TrueFalse,Python将它们视为 singletons ,这意味着在整个程序中只有一个False对象。每当您为False分配Somnething时,即是对单个False对象的引用,因此所有False对象都具有相同的 identity

答案 2 :(得分:-1)

您正在处理逻辑。考虑True = 1和False = 0很有帮助。

以这种方式思考。 0不是1,则将返回True,因为数字0不是数字1,而是一个真实的陈述。真假相同的概念

0 is not 1
#this will return False
False is not True
#the computer reads this in the exact same manner.