के बारे में list
सबसे पहले एक बहुत ही महत्वपूर्ण बिंदु, जिसमें से सब कुछ का पालन होगा (मुझे आशा है)।
साधारण पायथन में, list
किसी भी तरह से विशेष नहीं है (निर्माण के लिए प्यारा सिंटैक्स होने के अलावा, जो ज्यादातर एक ऐतिहासिक दुर्घटना है)। एक बार एक सूची [3,2,6]
बना लेने के बाद, यह सभी इरादों और उद्देश्यों के लिए होता है, बस एक साधारण पायथन ऑब्जेक्ट, जैसे एक संख्या 3
, सेट {3,7}
या एक फ़ंक्शन lambda x: x+5
।
(हां, यह अपने तत्वों को बदलने का समर्थन करता है, और यह पुनरावृत्ति, और कई अन्य चीजों का समर्थन करता है, लेकिन यह सिर्फ एक प्रकार है: यह कुछ कार्यों का समर्थन करता है, जबकि कुछ अन्य का समर्थन नहीं करते। इंट एक शक्ति बढ़ाने का समर्थन करता है, लेकिन ऐसा नहीं है। इसे बहुत खास बनाएं - यह सिर्फ एक इंट है। लैंबडा कॉलिंग का समर्थन करता है, लेकिन यह इसे बहुत खास नहीं बनाता है - यही लैम्बडा के लिए है, आखिरकार :)।
के बारे में and
and
एक ऑपरेटर नहीं है (आप इसे "ऑपरेटर" कह सकते हैं, लेकिन आप "ऑपरेटर" के लिए भी कॉल कर सकते हैं :)। पायथन में ऑपरेटर्स कुछ प्रकार की वस्तुओं पर बुलाए गए (के माध्यम से कार्यान्वित) तरीके हैं, जो आमतौर पर उस प्रकार के हिस्से के रूप में लिखे जाते हैं। इसके कुछ ऑपरेंड का मूल्यांकन करने के लिए कोई तरीका नहीं है, लेकिन ऐसा and
कर सकते हैं (और चाहिए)।
उस का परिणाम यह है कि and
अतिभारित नहीं किया जा सकता है, जैसे for
अतिभारित नहीं किया जा सकता है। यह पूरी तरह से सामान्य है, और एक निर्दिष्ट प्रोटोकॉल के माध्यम से संचार करता है। आप जो कर सकते हैं वह प्रोटोकॉल के आपके हिस्से को अनुकूलित करता है, लेकिन इसका मतलब यह नहीं है कि आप and
पूरी तरह से व्यवहार को बदल सकते हैं । प्रोटोकॉल है:
पायथन की कल्पना "ए और बी" की व्याख्या करें (यह सचमुच इस तरह से नहीं होता है, लेकिन यह समझने में मदद करता है)। जब यह "और" की बात आती है, तो यह उस वस्तु को देखता है जिसका उसने अभी मूल्यांकन किया है (ए), और उससे पूछता है: क्या आप सच हैं? ( नहीं : आप हैं True
?) यदि आप एक वर्ग के लेखक हैं, तो आप इस उत्तर को अनुकूलित कर सकते हैं। यदि a
उत्तर "नहीं", and
(पूरी तरह से ख को छोड़ दिया जाता है, तो इसका बिल्कुल भी मूल्यांकन नहीं किया जाता है, और) कहता है: a
मेरा परिणाम है ( नहीं : गलत मेरा परिणाम है)।
यदि a
उत्तर नहीं है, तो and
यह पूछता है: आपकी लंबाई क्या है? (फिर, आप इसे एक लेखक के a
वर्ग के रूप में अनुकूलित कर सकते हैं )। यदि a
उत्तर 0 है, and
तो ऊपर जैसा ही है - इसे गलत मानते हैं (गलत नहीं ), ख को छोड़ देता है, और a
परिणाम के रूप में देता है ।
अगर a
दूसरे प्रश्न का उत्तर ("आपकी लंबाई क्या है") के अलावा कुछ है, या यह बिल्कुल भी जवाब नहीं देता है, या यह पहले वाले को "हाँ" का जवाब देता है ("आप सच हैं"), and
बी का मूल्यांकन करता है, और कहता है: b
मेरा परिणाम है। ध्यान दें कि यह कोई प्रश्न नहीं पूछता है b
।
यह सब कहने का दूसरा तरीका यह है कि a and b
लगभग एक ही है b if a else a
, केवल एक बार मूल्यांकन करने के अलावा।
अब एक पेन और पेपर के साथ कुछ मिनट के लिए बैठें, और अपने आप को समझाएं कि जब {a, b} {ट्रू, फाल्स} का सबसेट है, तो यह ठीक उसी तरह काम करता है जैसा आप बूलियन ऑपरेटर्स से उम्मीद करते हैं। लेकिन मुझे आशा है कि मैंने आपको आश्वस्त किया है कि यह बहुत अधिक सामान्य है, और जैसा कि आप देखेंगे, इस तरह से बहुत अधिक उपयोगी है।
उन दोनों को एक साथ रखना
अब मुझे आशा है कि आप अपने उदाहरण को समझेंगे। 1. and
यदि कोई सूची, सूची, भेड़ का बच्चा या एक वर्ग Argmhbl की वस्तु है तो परवाह नहीं करता है। यह सिर्फ mylist1 प्रोटोकॉल के सवालों के जवाब के बारे में परवाह है। और हां, mylist1 लंबाई के बारे में सवाल का 5 जवाब देता है, इसलिए mylist2 लौटाता है। और बस। इसका mylist1 और mylist2 के तत्वों से कोई लेना-देना नहीं है - वे कहीं भी तस्वीर में प्रवेश नहीं करते हैं।
दूसरा उदाहरण: &
परlist
दूसरी ओर, उदाहरण के लिए &
, किसी भी अन्य की तरह एक ऑपरेटर है +
। इसे उस वर्ग पर एक विशेष विधि को परिभाषित करके एक प्रकार के लिए परिभाषित किया जा सकता है। int
इसे बिटवाइज़ "और" के रूप में परिभाषित करता है, और बूल इसे तार्किक "और" के रूप में परिभाषित करता है, लेकिन यह सिर्फ एक विकल्प है: उदाहरण के लिए, सेट्स और कुछ अन्य ऑब्जेक्ट जैसे तानाशाह कुंजी दृश्य इसे एक सेट चौराहे के रूप में परिभाषित करते हैं। list
बस इसे परिभाषित नहीं करता है, शायद क्योंकि गुइडो इसे परिभाषित करने के किसी भी स्पष्ट तरीके के बारे में नहीं सोचते थे।
numpy
दूसरे पैर पर: डी, NumPy सरणी हैं विशेष, या कम से कम वे बनने की कोशिश कर रहे हैं। बेशक, numpy.array सिर्फ एक वर्ग है, यह and
किसी भी तरह से ओवरराइड नहीं कर सकता है , इसलिए यह अगली सबसे अच्छी बात करता है: जब आपसे पूछा जाता है "क्या आप सच हैं", numpy.array एक ValueError को उठाता है, प्रभावी रूप से कह रहा है "कृपया सवाल को फिर से लिखें।" सच्चाई का दृश्य आपके मॉडल में फिट नहीं होता है "। (ध्यान दें कि ValueError संदेश के बारे में बात नहीं करता है and
- क्योंकि numpy.array नहीं जानता कि यह सवाल कौन पूछ रहा है; यह सिर्फ सच के बारे में बोलता है।)
के लिए &
, यह पूरी तरह से अलग कहानी है। numpy.array इसे अपनी इच्छानुसार परिभाषित कर सकता है, और यह &
अन्य ऑपरेटरों के साथ लगातार परिभाषित करता है : पॉइंटवाइज़। तो आप अंत में वही प्राप्त करें जो आप चाहते हैं।
HTH,
np.bitwise_and()
औरnp.logical_and()
और दोस्तों के भ्रम से बचने के।