为什么如果“如果没有[]”成功,则“ [] == False”的评估结果为False?

发布于 2021-01-29 19:23:53

我问这个问题是因为我知道以下检查列表是否为空的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

等等…

这里发生了什么?我觉得我确实缺少一些明显的东西。

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    if语句在布尔上下文中评估所有内容,就像对bool()内置函数的隐式调用一样。

    这是您实际检查if语句如何评估事物的方式:

    >>> bool([])
    False
    >>> bool([]) == False
    True
    

    参见真值测试文档,空列表被 认为是错误的 ,但这并不意味着它们等同于False

    PEP
    285
    也有它为什么以这种方式实现一些优秀的信息,请参阅在非常最后一颗子弹
    已解决的问题 部分的一部分,随着交易x == Truex == False明确。

    最有说服力的方面我是==一般传递的,所以a == bb == c暗示a == c。因此,如果这是您所期望的方式,[] == False并且'' == False是正确的,那么您可能会认为它[] == ''应该是正确的(即使它显然不应该使用没有隐式类型转换的语言)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看