2011-06-29 56 views
11

我過來了,其中「not None」同時等於True和False。Python中的邏輯悖論?

>>> not None 
True 

>>> not None == True 
True 

>>> not None == False 
True 

起初我預期這將是因爲運營商的訂單,但卻測試類似的表達時:

>>> not False 
True 

>>> not False == False 
False 

>>> not False == True 
True 

任何人都可以解釋爲什麼這是怎麼回事?

+0

我發現[此頁](http://docs.python.org/reference/expressions.html#summary)非常有用 –

回答

21

由於運算符優先級,此not none == True意味着not (None == True)意味着None != True,這是真的。同樣,None != False也是如此。值None與布爾值不同。

你的最後兩個表達式意思是False != False,這是false,而False != True,這是真的。

+1

太棒了!所以我的錯誤不是_(不是無)== True_? –

+7

@狗吃貓的世界:是的。但是,請記住'(not None)== True'爲true,而'(not True)== None'爲false,因爲'None!= False'。要將可能爲'None'的值轉換爲布爾值,請調用'bool'。 –

4

這確實是由於運算符的優先級。 not None == False將被評估爲not (None == False)None == FalseFalse,它解釋了你的結果。

試試這個:

>>> (not None) == True 
True 
>>> (not None) == False 
False 
2
>>> not None 
True 
>>> not None == True 
True 
>>> not None == False 
True 
>>> (not None) == True 
True 
>>> (not None) == False 
False 
2

這是擴張的順序。 python像這樣讀取它們

o>>> not (None == True) 
True 
>>> not (None == False) 
True 
>>> not False 
True 
>>> not (False == False) 
False 
>>> not (False == True) 
True 
>>> 

我想這說得很清楚。