为什么在Python中,[] == False 的结果是False,但0 == False的结果却是True?该如何解释这种现象?

3

我相对来说是Python新手,不理解以下行为:

为什么这条语句

[] == False 

即使空列表是假的,它也会评估为假吗?

以下是更多例子 - 在许多其他情况下,空列表似乎表现得像假值,只是不是在[] == False中...

>>> 0 == False                # what I'd expect
True
>>> not []                    # what I'd expect
True
>>> bool([])                  # what I'd expect
False
>>> [] == True                # what I'd expect
False
>>> [] == False               # unexpected
False
>>> bool([]) == False         # why does it evaluate to True again now?
True
>>> ([]) == (bool([]))        # unexpected
False
>>> (not []) == (not bool([]) # apparently adding 'not' makes it behave as expected again - why?
True

请问有人能给我解释一下吗?这些语句是如何在内部进行评估的?我觉得这可能与链接比较有关(例如:见此处),但我真的不明白这是否正确以及原因。

3
False和falsey不是同一件事情。 - roganjosh
1个回答

2
因为 falsy 并不等同于 False。Falsy 只是意味着...
bool(some_object) is False

那么,

>>> bool([]) is False
True
>>> bool({}) is False
True
>>> bool(0) is False
True

好的,那么在这方面 0 和一个空列表有什么区别?是否可以说 0 同时是假值和 False,而一个空列表只是假值但不是 False? - sam_sc
1
@sam_sc 因为在Python中,由于历史原因,布尔值是int的子类,只有两个值,即True和False,分别等于1和0。 - juanpa.arrivillaga
@sam_sc 当然,那是一个合理的说法。 - juanpa.arrivillaga
好的,那个历史解释对我来说很有道理。我就有这样的感觉。谢谢你的回答,这帮了我很多! - sam_sc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接