我去年学过python 3,但我几乎没有经验。
我正在重新审视元组。
我想弄清楚if (False,)
和True == (False,)
由于if (False,):
为真,但True == (False,)
为假,我感到非常困惑。
答案 0 :(得分:5)
if
不会测试== True
。它测试对象的truth value:
可以测试任何对象的真值,以便在
if
或while
条件下使用,或者作为下面布尔运算的操作数。
对象通常始终被视为 true ,但False
或None
个对象(自己),数字零或空容器。
(False,)
是一个包含一个元素的元组,任何非空的元组都被视为 true value ,因为它不是一个空容器。
您可以使用bool()
function获取真值的布尔值True
或False
:
>>> tup = (False,)
>>> bool(tup)
True
>>> bool(tup) == True
True
答案 1 :(得分:1)
元组的布尔值如果有内容则为True
,如果为空,则为False
。由于(False,)
是一个包含一个元素的元组,因此它的布尔值为True
。
您正在将tuple
与bool
进行比较,这将始终为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
的价值没有区别:False
,True
,整数42,文件对象,......,它没关系。
答案 4 :(得分:1)
空值等同于True
,而空值等同于False
。元组(False,)
不是空元组,因此if (False,)
总是成功。另一方面,True
不等于单例元组(False,)
,因此逻辑表达式True == (False,)
的计算结果为False
。