为什么如果“如果没有[]”成功,则“ [] == False”的评估结果为False?
我问这个问题是因为我知道以下检查列表是否为空的pythonic方法:
my_list = []
if not my_list:
print "computer says no"
else:
# my_list isn't empty
print "computer says yes"
将打印computer says no
等,所以这让我找出[]
与False
真值;
但是,如果我尝试将[]和False直接“比较”,则会获得以下信息:
>>> my_list == False
False
>>> my_list is False
False
>>> [] == False
False
等等…
这里发生了什么?我觉得我确实缺少一些明显的东西。
-
该
if
语句在布尔上下文中评估所有内容,就像对bool()
内置函数的隐式调用一样。这是您实际检查
if
语句如何评估事物的方式:>>> bool([]) False >>> bool([]) == False True
参见真值测试文档,空列表被 认为是错误的 ,但这并不意味着它们等同于
False
。PEP
285也有它为什么以这种方式实现一些优秀的信息,请参阅在非常最后一颗子弹
已解决的问题 部分的一部分,随着交易x == True
和x == False
明确。最有说服力的方面我是
==
一般传递的,所以a == b
和b == c
暗示a == c
。因此,如果这是您所期望的方式,[] == False
并且'' == False
是正确的,那么您可能会认为它[] == ''
应该是正确的(即使它显然不应该使用没有隐式类型转换的语言)。