这可能很愚蠢,但对我来说有点令人困惑:
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(使用前将#替换为@)