您正在根據布爾值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
或'A' == 'A'
相同。
當你看到諸如if l:
之類的東西時就會遇到困難,而且此檢查不會通過。這是因爲您正在檢查項目的真值。按照慣例,所有這些項目會失敗的布爾檢查 - 也就是說,他們的布爾值將是False
:
None
False
(顯然)
- 任何空序列:
''
,[]
,()
- 任何「零」值:
0
,0.0
等
- 任何空集合:
{}
(空字典)
- 任何其
len()
返回0
這些被稱爲 「falsey」 值。 其他一切都是「真實的」。從而導致一些類似怪事:
>>> def foo():
... pass
...
>>> bool(foo)
True
它也是很好的在此指出,的方法不返回一個明確的值,總是有None
作爲其返回類型,導致此:
>>> def bar():
... x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False
Python比較是強類型的:[不同類型的對象...永遠不會比較相等](http://docs.python.org/library/stdtypes.html)。這就是爲什麼'l == False'失敗。 – georg