2016-10-12 102 views
2

我的環境是:ubuntu 16.04 & python 2.7.12。關於Truthiness and the Booleans True and False

我閱讀文檔,並發現''()[]{}None都被認爲是默認False

但我不明白這是怎麼回事在下面的例子:

Python 2.7.12 (default, Jul 1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a='' 
>>> a==False 
False 
>>> a==True 
False 
>>> a=bool(a) 
>>> a==False 
True 
>>> 
>>> 
>>> 
>>> a="abcdefg" 
>>> a==True 
False 
>>> a==False 
False 
>>> a=bool(a) 
>>> a==True 
True 
>>> 

我要得到正確的結果,看來我必須使用bool()函數來進行。 這是正確的,爲什麼?

+1

所有這一切意味着當需要布爾轉換時,例如'[]'會自動轉換爲'False' *。因爲'[]'和'False'是不同的對象,所以你不需要轉換爲布爾來評估'=='語句,'[] == False'返回'False'。但是'如果[]'會自動轉換爲'if False'。 – Julien

+0

請注意,雖然布爾轉換後的值用於if和諸如此類,但對象仍將保留其(非布爾)值,即使在評估爲「True」或「False」後。例如,'[]和42'返回'[]',並且'False or None'返回'None'。這是因爲像這樣的布爾語句不會返回「True」或「False」,而是返回在邏輯表達式的值已知之前求值的最後一個表達式的值。 – BallpointBen

回答

2

這並不是說這些價值等於False,它是在一個布爾上下文中使用時,他們的行爲假。

如果您絕對需要TrueFalse的值,但在大多數情況下沒有必要,它肯定適用於bool

1

docs說:

任何對象都可以用於真值在if或while條件或如下布爾運算的操作數進行測試,使用

換句話說,這個工程的a = ''

if a: 
    print "this won't print" 

a仍不等於False

相關問題