2011-06-29 12 views
11

मैं इस पर आया, जहां "कोई नहीं" एक साथ सत्य और झूठी दोनों बराबर है।पायथन में तार्किक विरोधाभास?

>>> 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 != True, जो सत्य है।

+1

बढ़िया! तो मेरी त्रुटि _ (नहीं कोई नहीं) == True_ करने के लिए नहीं था? –

+7

@ डॉग बिल्ली दुनिया खाओ: हाँ। लेकिन फिर, ध्यान रखें कि '(कोई भी नहीं) == सही सत्य है, जबकि '(सत्य नहीं) == कोई भी झूठा नहीं है, क्योंकि' कोई नहीं! = झूठा '। एक बूलियन को 'कोई नहीं' मान बदलने के लिए, उस पर 'बूल' पर कॉल करें। –

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

यह विस्तार का आदेश है। पायथन उन्हें

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

मुझे लगता है कि यह स्पष्ट करता है।

संबंधित मुद्दे