python - क्यों `कोई नहीं है




python-3.x python-2.7 (2)

आज, एक साक्षात्कार में, सीटीओ ने मुझसे पूछा कि एक आसान प्रश्न कैसा दिखता है,

यह कथन क्या लौटाता है? :

None is None is None

मैंने सोचा कि पायथन ने पहले ऑपरेशन को अंजाम दिया None is None और यह True लौटेगा। उसके बाद, यह True is None जो False लौटेगा। लेकिन, मेरे आश्चर्य के लिए, सही उत्तर True । मैं इस प्रश्न का उत्तर खोजने की कोशिश कर रहा हूं, लेकिन कुछ दिनों तक खोज करने के बाद भी मुझे कुछ नहीं मिला। क्या कोई समझा सकता है कि ऐसा क्यों होता है?


एक तुलना ऑपरेटर है, जैसा कि डॉक्स में देखा गया है :

comparison    ::=  or_expr ( comp_operator or_expr )*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"

तो अन्य तुलना ऑपरेटरों की तरह, यह मनमाने ढंग से जंजीर किया जा सकता है। इसलिए

a = b = c = None
a is b is c

के बराबर है

(a is b) and (b is c)

जैसा कि कुछ लोग टिप्पणी करते हैं, पायथन तुलना की जंजीर हो सकती है

स्पष्टीकरण के लिए, जब पीछा करते हुए, पायथॉन वास्तव में भावों के बारे में बताता है।

टी वह इसके पीछे तर्क देते हैं , यह है कि a < b < c जैसी अभिव्यक्तियों की व्याख्या है जो गणित में पारंपरिक है। इसलिए आपकी विशेष अभिव्यक्ति का भ्रम None is None is None जहां None is None is None पहचानकर्ता ऑपरेटर शामिल नहीं है।

तो मूल रूप से, यह अनुवाद होगा:

(None is None) and (None is None)

जो स्पष्ट रूप से True

यहाँ पायथन docs में एक और उदाहरण दिया गया है

अग्रिम जानकारी

खासकर जब से यह एक साक्षात्कार प्रश्न था, यह ध्यान रखना महत्वपूर्ण है कि यह सभी भाषाओं के बीच साझा किया जाने वाला सामान्य व्यवहार नहीं है।

जैसा कि मैंने कहा कि प्रलेखन में मैंने कहा है,

सी के विपरीत, पायथन में सभी तुलनात्मक कार्यों की एक ही प्राथमिकता होती है, जो कि किसी भी अंकगणितीय, स्थानांतरण या सहज संचालन की तुलना में कम है।

तो, आइए 10 > x > 2 अभिव्यक्ति पर विचार करें (क्योंकि ऑपरेटर सी में मान्य नहीं है)।

C का अनुवाद ( ऑपरेटर पूर्वता के कारण )

((10 > x) > 2)

पायथन का अनुवाद

(10 > x) and (x > 2)




python-2.7