if(False,)和True ==(False)之间有什么区别

时间:2016-10-15 17:46:01

标签: python tuples

我去年学过python 3,但我几乎没有经验。

我正在重新审视元组。

我想弄清楚if (False,)True == (False,)

之间的区别

由于if (False,):为真,但True == (False,)为假,我感到非常困惑。

5 个答案:

答案 0 :(得分:5)

if不会测试== True。它测试对象的truth value

  

可以测试任何对象的真值,以便在ifwhile条件下使用,或者作为下面布尔运算的操作数。

对象通常始终被视为 true ,但FalseNone个对象(自己),数字零或空容器。

(False,)是一个包含一个元素的元组,任何非空的元组都被视为 true value ,因为它不是一个空容器。

您可以使用bool() function获取真值的布尔值TrueFalse

>>> tup = (False,)
>>> bool(tup)
True
>>> bool(tup) == True
True

答案 1 :(得分:1)

  1. 元组的布尔值如果有内容则为True,如果为空,则为False。由于(False,)是一个包含一个元素的元组,因此它的布尔值为True

  2. 您正在将tuplebool进行比较,这将始终为False

答案 2 :(得分:1)

也许这凸显了差异。

if (False,):评估,因为非空元组是真值y值。事实并非如此。并且在任何情况下都不应该将元组与布尔值进行比较,而不管所述元组的内容是什么。

t = (False,)

print(bool(t)) # True
print(t == True) # False
print(bool(t) == True) # True

答案 3 :(得分:1)

对于任何x

if (x,):

成功,因为(x,)是一个非空元组,并且所有非空元组在布尔上下文中都计算为True

再次对任何x

if True == (x,):

无法成功,因为被比较的事物甚至不属于同一类型(开始时,True不是元组)。

在你的问题中,我拼写为x的拼写False,但x的价值没有区别:FalseTrue,整数42,文件对象,......,它没关系。

答案 4 :(得分:1)

空值等同于True,而空值等同于False。元组(False,)不是空元组,因此if (False,)总是成功。另一方面,True不等于单例元组(False,),因此逻辑表达式True == (False,)的计算结果为False