空列表布尔值

roo*_*oot 13 python boolean list

这可能只是愚蠢的,但对我来说这有点令人困惑:

In [697]: l=[]

In [698]: bool(l)
Out[698]: False

In [699]: l == True
Out[699]: False

In [700]: l == False
Out[700]: False 

In [701]: False == False
Out[701]: True
Run Code Online (Sandbox Code Playgroud)

为什么l==False返回FalseFalse == False返回True

Bur*_*lid 33

您正在根据布尔值的文字值进行检查False.同样'A' == False不会是真的.

如果你施展它,你会看到差异:

>>> l = []
>>> l is True
False
>>> l is False
False
>>> l == True
False
>>> l == False
False
>>> bool(l) == False
True
Run Code Online (Sandbox Code Playgroud)

原因False == False是因为您正在比较相同的对象.它与2 == 2or 相同'A' == 'A'.

当你看到类似的事情if l:并且这个检查永远不会过去时,困难就来了 那是因为您正在检查项目的真值.按照惯例,所有这些项都将失败一个布尔检查 - 也就是说,它们的布尔值将是False:

  • None
  • False (明显)
  • 任何空序列:'',[],()
  • 任何"零"值:0,0.0,等.
  • 任何空集合:( {}一个空的字典)
  • 任何len()返回的东西0

这些被称为"假"值.其他一切都是"真实的".这可能导致一些奇怪的事情,如:

>>> def foo():
...   pass
...
>>> bool(foo)
True
Run Code Online (Sandbox Code Playgroud)

这里还要注意的是,不返回显式值的方法总是具有None返回类型,这导致:

>>> def bar():
...   x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False
Run Code Online (Sandbox Code Playgroud)


lol*_*pop 8

空列表不一样False,但是False等于False因为它是同一个对象.bool(l)返回,False因为空列表是"虚假".

总之,==不是bool() == bool().

例如,[1, 2] == [1, 2, 3]False,即使两人都是"真正的".