python - पायथन में+और+= ऑपरेटर का उपयोग करके संबंध



python-3.x list (1)

मूल विचार यह है कि पायथन में + और += ऑपरेटर समान संचालन आवश्यक नहीं हैं, और वे सूचियों के लिए वास्तव में भिन्न हैं। + ऑपरेशन __add__ मैजिक विधि द्वारा किया जाता है जबकि += ऑपरेशन __iadd__ (इन-प्लेस ऐड) मैजिक विधि द्वारा किया जाता है। ये जादुई तरीके ऑपरेटर के बाईं ओर के प्रकार से आते हैं।

किसी सूची के लिए इन-प्लेस जोड़ने के लिए दाईं ओर एक सूची की आवश्यकता नहीं है, बस एक पुनरावृत्त। आइटम को फिर से चलने-फिरने के लिए एक-एक करके सूची में जोड़ दिया जाता है। यह सूची की extend विधि के समान है। इसलिए += ऑपरेटर दाईं ओर ऑब्जेक्ट के प्रकार की उपेक्षा नहीं करता है, यह सिर्फ उन संभावित प्रकारों का विस्तार करता है जिनका उपयोग किया जा सकता है।

यह व्यवहार कुछ भ्रमित करने वाला है - यह तब से होना चाहिए जब आप दो दिनों में दूसरे व्यक्ति हैं, मैंने इस मुद्दे पर एक समान (लेकिन डुप्लिकेट नहीं) सवाल पूछा है। हालांकि, यह व्यवहार सुविधाजनक है - अब हमारे पास सूची को किसी भी चलने योग्य के साथ संयोजित करने का एक आसान तरीका है।

इस पर अधिक जानकारी के लिए, पायथन लिस्ट्स आपको + = एक ट्यूपल क्यों बनाते हैं, जब आप एक ट्यूपल नहीं कर सकते?

जैसा कि @ khelwood की टिप्पणी में कहा गया है, परिणामी प्रकार a += b स्पष्ट है: a का प्रकार। तो b का प्रकार लचीला हो सकता है। परिणामी प्रकार a + b स्पष्ट नहीं है। पायथन एक सख्ती से टाइप की जाने वाली भाषा है और इस तरह की अस्पष्टता से नफरत करता है। अजगर का ज़ेन बताता है

निहितार्थ की तुलना में स्पष्ट है।

तथा

अस्पष्टता के सामने, अनुमान लगाने के प्रलोभन से इनकार करें।

तथा

यद्यपि व्यावहारिकता शुद्धता को हरा देती है।

इसलिए मौजूदा व्यवहार पायथन के ज़ेन से काफी मेल खाता है। मैं ध्यान देता हूं कि ज़ेन में स्थिरता के बारे में कुछ भी नहीं है।

हाल ही में, मैंने सूचियों को सम्‍मिलित करते हुए एक विसंगति पर गौर किया है।

इसलिए यदि मैं + ऑपरेटर का उपयोग करता हूं, तो यह विभिन्न प्रकार के किसी भी ऑब्जेक्ट के साथ सूची को समाप्‍त नहीं करता है। उदाहरण के लिए।,

l = [1,2,3]
l = l + (4,5)        #TypeError: can only concatenate list (not "tuple") to list

लेकिन, अगर मैं + = ऑपरेटर का उपयोग करता हूं, तो यह ऑब्जेक्ट के प्रकार की उपेक्षा करता है। उदाहरण के लिए।,

l = [1,2,3]
l += "he"            #Here, l becomes [1, 2, 3,"h", "e"]

l += (56, 67)        #Here, l becomes [1, 2, 3,"h", "e", 56, 67]

तो, क्या यह सिर्फ भाषा का शब्दार्थ है या कोई और कारण है ??





concatenation