जब मैं इस प्रश्न का उत्तर देख रहा था , तो मैंने पाया कि मुझे अपना उत्तर समझ में नहीं आया है।
मुझे वास्तव में समझ नहीं आया कि यह कैसे पार्स किया जा रहा है। दूसरा उदाहरण गलत क्यों लौटाता है?
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
किसी भी मदद के लिए धन्यवाद। मुझे लगता है कि मुझे कुछ स्पष्ट याद आ रहा है।
मुझे लगता है कि यह लिंक किए गए डुप्लिकेट से बिल्कुल अलग है:
क्यों अभिव्यक्ति 0 <0 == 0 अजगर में झूठी वापसी करता है? ।
दोनों प्रश्न अभिव्यक्ति की मानवीय समझ के साथ करने हैं। अभिव्यक्ति के मूल्यांकन के दो तरीके (मेरे दिमाग में) प्रतीत हो रहे थे। बेशक न तो सही थे, लेकिन मेरे उदाहरण में, अंतिम व्याख्या असंभव है।
को देखते हुए 0 < 0 == 0
आप प्रत्येक आधा मूल्यांकन किया जा रहा कल्पना कर सकता है और अभिव्यक्ति के रूप में अर्थ निकालने:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
इसलिए लिंक उत्तर देता है कि यह मूल्यांकन क्यों करता है False
:
>>> 0 < 0 == 0
False
लेकिन मेरे उदाहरण के साथ 1 in ([1,0] == True)
एक अभिव्यक्ति के रूप में कोई मतलब नहीं है, इसलिए वहाँ के बजाय दो (आमतौर पर गलत) संभव व्याख्याएं, केवल एक संभव लगता है:
>>> (1 in [1,0]) == True
==
तुलना में तंग करता हैin
, इसलिए[1,0] == True
पहले मूल्यांकन किया जाता है, फिर उसी का परिणाम खिलाया जाता है1 in other_result
।