2010-07-15 21 views
186

के बीच क्या अंतर है हाल ही में मैंने इस वाक्यविन्यास में आया, मुझे अंतर से अनजान है।"कोई नहीं है" और "== कोई नहीं"

अगर कोई मुझे अंतर बता सकता है तो मैं इसकी सराहना करता हूं।

+2

देखता दे देंगे [वहाँ == 'और' अजगर में is' के बीच 'अंतर है?] (http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python/134659#134659) –

+0

@ myusuf3: आप स्वीकार किए गए उत्तर को बदलने पर विचार करना चाहेंगे सही वाला। – max

उत्तर

177

उत्तर here समझाया गया है।

के शब्दों में:

एक वर्ग तुलना किसी भी तरह से यह चुनता को लागू करने के लिए स्वतंत्र है, और यह कोई नहीं के खिलाफ तुलना कुछ (जो वास्तव में समझ में आता है मतलब बनाने के लिए चुन सकते हैं; अगर कोई तुमसे कहा था स्क्रैच से कोई भी ऑब्जेक्ट लागू नहीं करें, आप इसे पर कैसे प्राप्त करेंगे, इसके खिलाफ सच की तुलना करें?)।

व्यावहारिक रूप से बोलने से, कस्टम तुलना ऑपरेटर दुर्लभ होने के बाद बहुत अंतर नहीं है। लेकिन आपको सामान्य नियम के रूप में is None का उपयोग करना चाहिए।

+0

यह एक दिलचस्प (और छोटा) पढ़ा गया था। और कुछ उपयोगी जानकारी 'is' v। '== 'में है। –

+17

इसके अलावा, 'कोई नहीं है' '== कोई नहीं '~ –

+0

@NasBanov की तुलना में थोड़ा सा (~ 50%) तेज है क्या आपके पास यह लिंक है जहां आप इसे पढ़ते हैं? – myusuf3

38

इस मामले में, वे वही हैं। None एक सिंगलटन ऑब्जेक्ट है (वहां केवल एक None मौजूद है)।

is यह देखने के लिए जांच करता है कि ऑब्जेक्ट एक ही वस्तु है, जबकि == बस जांचता है कि वे समकक्ष हैं या नहीं।

उदाहरण के लिए:

p = [1] 
q = [1] 
p is q # False because they are not the same actual object 
p == q # True because they are equivalent 

लेकिन वहाँ है, क्योंकि केवल एक None, वे हमेशा एक ही हो जाएगा, और यह सच है is वापस आ जाएगी।

p = None 
q = None 
p is q # True because they are both pointing to the same "None" 
+14

यह उत्तर सही नहीं है, जैसा कि बेन हॉफस्टीन के उत्तर में http://stackoverflow.com/questions/3257919/is-none-vs-none/3257957#3257957 के नीचे बताया गया है। 'x == कोई भी' True' का मूल्यांकन नहीं कर सकता है, भले ही 'x'' none' नहीं है, लेकिन कुछ क्लास का उदाहरण अपने स्वयं के कस्टम समानता ऑपरेटर के साथ है। – max

91
class Foo: 
    def __eq__(self,other): 
     return True 
foo=Foo() 

print(foo==None) 
# True 

print(foo is None) 
# False 
3

आप numpy उपयोग करते हैं,

if np.zeros(3)==None: pass 

आप त्रुटि जब numpy elementwise तुलना

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