2011-06-29 14 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はブール値とは異なります。

最後の2つの表現は、偽のFalse != Falseと、真であるFalse != Trueを意味します。

+1

素晴らしいです!だから私のエラーは、(Noneではない)== True_をしないことでしたか? –

+7

@Dog eat cat world:はい。しかし、 '(Noneではない)== True'は真であり、' None!= False'から '(Trueではない)== None'はfalseであることに注意してください。 'None'をブール値に変換するには、' bool'を呼び出します。 –

4

実際これは演算子の優先順位によるものです。 not None == Falsenot (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 
>>> 

これは明らかです。

関連する問題