2015-08-24 17 views
9

तो मैं कुछ code ऑनलाइन देख रहा था और मैं (लाइन 286 पर) एक रेखा के पार पहुंचा
if depth > 0 and best <= -MATE_VALUE is None and nullscore > -MATE_VALUE:
तुलना ऑपरेटर और 'है' - पाइथन में ऑपरेटर प्राथमिकता?

हिस्सा रहा था समझने में समस्या आ best <= -MATE_VALUE is None था।

तो मैंने value1 > value2 is value3 कार्य जैसे विवरण को देखने के लिए दुभाषिया को निकाल दिया।
तो मैं

>>> 5 > 2 is True 
False 

>>> (5 > 2) is True 
True 

>>> 5 > (2 is True) 
True 


मेरे प्रश्न की कोशिश की

क्यों 5 > 2 is True नहीं True है? और ये चीजें आम तौर पर कैसे काम करती हैं?

धन्यवाद।

+3

ऑपरेटर चेनिंग को देखो। यह वास्तव में एक प्राथमिकता मुद्दा नहीं है। पहले को तर्कसंगत रूप से '(5> 2) && (2 सत्य है)' के रूप में माना जाता है, यही कारण है कि कैसे पाइथन अर्थपूर्ण 'a user2864740

+1

http://stackoverflow.com/questions/25753474/python-comparison-operators-chaining-grouping-left-to-right, http://stackoverflow.com/questions/101268/hidden-features-of-python/101945 # 101 9 45, http: // stackoverflow।कॉम/प्रश्न/25103085/चेनिंग-ऑपरेटरों, http://stackoverflow.com/q/6074018/2864740 – user2864740

+3

एफडब्ल्यूआईडब्ल्यू, यह लाइन मेरे लिए बहुत अजीब लगती है - यह तब स्पष्ट नहीं है जब यह अभिव्यक्ति कभी सच होगी। यदि MATE_VALUE एक संख्या है (जो संभवतः यह '-MATE_VALUE' की वजह से है), तो यह कभी भी नहीं होगा (यदि यह था, '-' काम नहीं करेगा।) तो यदि रेखा अपवाद नहीं फेंकती है, क्या यह हमेशा गलत नहीं होगा? – DSM

उत्तर

7

आप अजगर के ऑपरेटर

5 > 2 is True 

काम कर श्रृंखलन देख रहे हैं

5>2 and 2 is True 

के बराबर है आपको लगता है कि

>>> 5>2 is 2 

रिटर्न True में देख सकते हैं।

3

पहला, 5 > 2 is True पाइथन (धारा 5.9 here) में ऑपरेटर चेनिंग के कारण (5 > 2) and (2 is True) के बराबर है।

यह स्पष्ट है कि 5 > 2 सत्य का मूल्यांकन करता है। हालांकि, 2 is TrueFalse का मूल्यांकन करेगा क्योंकि यह स्पष्ट रूप से bool में परिवर्तित नहीं हुआ है। यदि आप रूपांतरण को मजबूर करते हैं, तो आप पाएंगे कि bool(2) is TrueTrue पैदा करता है। अन्य विवरण जैसे कि if -स्टेटमेंट आपके लिए यह रूपांतरण करेगा, इसलिए if 2: काम करेगा।

उपयोग is जब आप एक वस्तु की पहचान के खिलाफ जाँच करना चाहते हैं (उदाहरण के लिए if var is None देखने के लिए जाँच):

दूसरे, वहाँ is ऑपरेटर और == ऑपरेटर (here से लिया गया) के बीच एक महत्वपूर्ण अंतर है । == का उपयोग करें जब आप समानता (उदा। Var 3 के बराबर है?) की जांच करना चाहते हैं।

>> [1,2] is [1,2] 
False 

>> [1,2] == [1,2] 
True 

हालांकि यह इस उदाहरण पर तत्काल प्रभाव नहीं है, तो आप इसे ध्यान में भविष्य के लिए रखना चाहिए।

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