空列表布尔值

2024-01-29

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

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

为什么l==False return False while False == False回报True?


您正在根据布尔值的字面值检查它False。与'A' == False不会是真的。

如果你投射它,你会看到区别:

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

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

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

  • None
  • False(明显地)
  • 任何空序列:'', [], ()
  • 任何“零”值:0, 0.0, etc.
  • 任何空集合:{}(一个空字典)
  • 任何其len()返回一个0

这些被称为“假”值。其他一切都是“真实的”。这可能会导致一些奇怪的事情,例如:

>>> def foo():
...   pass
...
>>> bool(foo)
True

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

>>> def bar():
...   x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空列表布尔值 的相关文章

随机推荐