उत्तर here उन मामलों के लिए एक हैंडविंग संदर्भ देता है जहां आप __ne__
__eq__
के तार्किक उलटा के अलावा कुछ और लौटने के लिए चाहते हैं, लेकिन मैं इस तरह के किसी भी मामले की कल्पना नहीं कर सकता। कोई उदाहरण?पाइथन के पास सिर्फ __eq__ की बजाय __ne__ ऑपरेटर विधि क्यों है?
उत्तर
SQLAlchemy एक महान उदाहरण है। Uninitiated के लिए, SQLAlchemy एक ओआरएम है और एसक्यूएल कथन उत्पन्न करने के लिए पायथन अभिव्यक्ति का उपयोग करता है। एक अभिव्यक्ति इस तरह के
meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
रूप model.Theme.id == model.VoteWarn.post_id
एक बूलियन वापस नहीं करता है, लेकिन एक उद्देश्य यह है कि अंततः WHERE theme.id = vote.post_id
की तरह एक SQL क्वेरी पैदा करता है। उलटा कुछ WHERE theme.id <> vote.post_id
जैसे उत्पादन करेगा ताकि दोनों विधियों को परिभाषित करने की आवश्यकता हो।
कुछ पुस्तकालय फैंसी चीजें करते हैं और इन परिचालनों से एक बूल वापस नहीं करते हैं। उदाहरण के लिए, numpy के साथ के लिए:
>>> import numpy as np
>>> np.array([1,2,5,4,3,4,5,4,4])==4
array([False, False, False, True, False, True, False, True, True], dtype=bool)
>>> np.array([1,2,5,4,3,4,5,4,4])!=4
array([ True, True, True, False, True, False, True, False, False], dtype=bool)
जब आप एक ही मूल्य या किसी अन्य सरणी के लिए एक सरणी तुलना तुम वापस इसी तत्वों की तुलना के परिणामों की bools की एक सरणी मिलता है। x!=y
not (x==y)
के बराबर था, तो आप ऐसा नहीं कर पाए।
मैं इसका पालन नहीं कर सकता। यह ध्यान में रखते हुए कि स्पष्ट रूप से बूल की सरणी पर 'नहीं' परिभाषित किया गया है, फिर भी हमें 'बराबर नहीं' के बजाय 'neq' की आवश्यकता नहीं है। लेकिन स्पष्ट रूप से वहां एक प्रदर्शन और संभावित स्मृति लाभ है। – Voo
जबकि '__not__' विशेष विधि को 'नहीं' ऑपरेटर को ओवरराइड करने के लिए एक विशेष तर्क दिया जा सकता है, यह वर्तमान में पायथन में मौजूद नहीं है। – Weeble
ओह यह आश्चर्यजनक है .. हाँ उस मामले में यह न केवल प्रदर्शन का मामला है। धन्यवाद! – Voo
अधिक आम तौर पर, many valued logic सिस्टम, equals
और not equals
एक दूसरे के अनिवार्य रूप से सटीक नहीं हैं।
स्पष्ट उदाहरण एसक्यूएल है जहां True == True
, False == False
और Null != Null
। हालांकि मुझे नहीं पता कि कोई विशिष्ट पायथन उदाहरण हैं या नहीं, मैं कल्पना कर सकता हूं कि इसे स्थानों में लागू किया जा रहा है।
और MYSQL में, आपके पास ऐसे मूल्य भी हो सकते हैं जो एक ही समय में 'न्यूल' और 'नल नल' हैं! 1! (मुझे लगता है कि MySQL की एक डिजाइन बग हालांकि) –
कम से कम '>' और '<=' ऐसे मामले हैं। अर्थात् 'NaN < anything => झूठा' और 'NaN> = कुछ भी => झूठा'। (मान लीजिए पायथन आईईईई फ्लोटिंग पॉइंट लॉजिक का अनुसरण करता है) – CodesInChaos
हां मूल रूप से कुछ भी जिसके पास [कुल ऑर्डर] नहीं है (http://en.wikipedia.org/wiki/Total_ordering) उस श्रेणी में आ सकता है। अब उन चीजों को स्पष्ट कारणों से दुर्लभ हैं, लेकिन वे मौजूद हैं। NaNs एक अच्छा उदाहरण हैं। – Voo
सिर्फ इसलिए कि आप कर सकते हैं। –