2010-08-30 25 views
6

जब तक मैं पागल नहीं हूं if None not in x और if not None in x समकक्ष हैं। क्या कोई पसंदीदा संस्करण है? मुझे लगता है कि None not in अधिक अंग्रेजी-वाई है और इसलिए अधिक पायथनिक है, लेकिन not None in अन्य भाषा वाक्यविन्यास की तरह है। क्या कोई पसंदीदा संस्करण है?"कोई भी नहीं" बनाम "कोई नहीं"

+2

यह भी देखें http://stackoverflow.com/questions/2710940 – Gumbo

+0

यदि आप केवल 1 ऑपरेटर को दूसरे ऑपरेटर में बदलते हैं, तो SO पर बहुत सारे प्रश्न डुप्लिकेट होंगे – Falmarri

उत्तर

14

वे एक ही बाइटकोड को संकलित करते हैं, इसलिए हाँ वे बराबर हैं।

>>> import dis 
>>> dis.dis(lambda: None not in x) 
    1   0 LOAD_CONST    0 (None) 
       3 LOAD_GLOBAL    1 (x) 
       6 COMPARE_OP    7 (not in) 
       9 RETURN_VALUE 
>>> dis.dis(lambda: not None in x) 
    1   0 LOAD_CONST    0 (None) 
       3 LOAD_GLOBAL    1 (x) 
       6 COMPARE_OP    7 (not in) 
       9 RETURN_VALUE 

documentation भी यह स्पष्ट करता है कि दो बराबर हैं:

x not in sx in s का निषेध देता है।

जैसा कि आप उल्लेख करते हैं None not in x अधिक प्राकृतिक अंग्रेजी है इसलिए मैं इसका उपयोग करना पसंद करता हूं।

यदि आप not y in x लिखते हैं तो यह अस्पष्ट हो सकता है कि आपका मतलब not (y in x) या (not y) in x था। यदि आप not in का उपयोग करते हैं तो कोई अस्पष्टता नहीं है।

+0

धन्यवाद, आपको पता नहीं था कि आप बाइटकोड की तुलना कर सकते हैं इस। उल्लेख करने के लिए –

7

अभिव्यक्ति

not (None in x) 

(कोष्ठक स्पष्टता के लिए जोड़ा) एक साधारण बूलियन निषेध है। हालांकि,

None not in x 

विशेष सिंटेक्स अधिक पठनीय कोड के लिए जोड़ा जाता है (कोई संभावना में के सामने यहाँ वहाँ है, और न ही यह कोई मतलब है, उपयोग करने के लिए और, या, आदि)। यदि यह विशेष मामला जोड़ा गया था, तो इसका इस्तेमाल करें।

ही

को
foo is not None 

बनाम

not foo is None 

मुझे लगता है बहुत स्पष्ट पढ़ने के लिए "नहीं है" लागू होता है। एक अतिरिक्त बोनस के रूप में, यदि अभिव्यक्ति एक बड़ी बूलियन अभिव्यक्ति का हिस्सा है, तो नहीं का दायरा तुरंत स्पष्ट होता है।

+0

+1 – Falmarri

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