2012-03-27 15 views
8

मैं हाल ही में इस अभिव्यक्ति से अधिक ठोकर खाई है:इस पायथन उदाहरण में ऑपरेटर बाध्यकारी काम कैसे करता है?

True == False in (False,) 

यह False का आकलन करती है, लेकिन मैं क्यों समझ में नहीं आता। True == FalseFalse और False in (False,)True है है, इसलिए दोनों (मेरे लिए) प्रशंसनीय संभावनाओं

True == (False in (False,)) 

और

(True == False) in (False,) 

, True का मूल्यांकन के रूप में मैं उम्मीद होता। यहां क्या गलत हो रहा है?

+7

संभावित डुप्लिकेट [क्यों [1 [1,0 \] == सच में) गलत का मूल्यांकन करता है?] (Http://stackoverflow.com/questions/9284350/why-does-1-in-1 -0-true-मूल्यांकन-to-false) – agf

उत्तर

9

मुझे विश्वास है कि यह पायथन की तुलना-ऑपरेटर चेनिंग का एक कोने केस है। यह

(True == False) and (False in (False,)) 

का विस्तार करता है जो False का मूल्यांकन करता है।

यह व्यवहार परंपरागत गणित नोटेशन से मेल खाता था (उदाहरण के लिए x == y == z जिसका अर्थ है कि सभी तीन बराबर हैं, या 0 <= x < 10 अर्थ x सीमा [0, 10) में है। लेकिन in एक तुलनात्मक ऑपरेटर भी है, जो अप्रत्याशित व्यवहार प्रदान करता है।

+0

क्या यह पाइथन में समझ में आता है, क्योंकि मैं देख सकता हूं कि क्या हो रहा है लेकिन ऑपरेटर में == पर एक पूरी तरह से अलग फ़ंक्शन है, तो यह तुलनात्मक ऑपरेटर चेनिंग क्यों करता है? – jamylak

+0

'इन' दूसरों की तरह है कि यह दो मानों को देखता है और दो मानों के बीच संबंध के अनुसार एक बूल देता है। –

+1

इसके अलावा, यह ध्यान रखना उपयोगी है कि यह अभिव्यक्ति 'झूठी और सही' के प्रतिद्वंद्वी है जो [शॉर्ट सर्किट मूल्यांकन] के कारण 'गलत 'का मूल्यांकन करेगी (http://en.wikipedia.org/wiki/Short- circuit_evaluation)। –

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