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返回False时False == 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:
NoneFalse (明显)'',[],()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)
空列表不一样False,但是False等于False因为它是同一个对象.bool(l)返回,False因为空列表是"虚假".
总之,==不是bool() == bool().
例如,[1, 2] == [1, 2, 3]是False,即使两人都是"真正的".