इनप्लेस ऑपरेटर्स ऑब्जेक्ट को सीधे मॉडिफाई करते हैं बिना नई कॉपी बनाए। स्टैंडर्ड ऑपरेटर्स नया ऑब्जेक्ट बनाते हैं।
इनप्लेस ऑपरेटर्स
सामान्य इनप्लेस ऑपरेटर्स: +=, -=, *=, /=, %=, //=, **=।
a = 9
a += 2
print(a) # 11 (a मॉडिफाई हुआ)
language = "Python"
language += "3"
print(language) # Python3 (स्ट्रिंग्स इम्यूटेबल हैं, लेकिन += नया ऑब्जेक्ट बनाकर रीबाइंड करता है)
operator मॉड्यूल: फ़ंक्शनल फॉर्म
प्रत्येक इनप्लेस ऑपरेटर का operator मॉड्यूल में फ़ंक्शन समकक्ष होता है:
| ऑपरेटर | operator फ़ंक्शन | विवरण |
|---|---|---|
+= | iadd(x, y) | इनप्लेस एडिशन |
-= | isub(x, y) | इनप्लेस सब्ट्रैक्शन |
*= | imul(x, y) | इनप्लेस मल्टीप्लिकेशन |
/= | itruediv(x, y) | इनप्लेस ट्रू डिवीजन |
//= | ifloordiv(x, y) | इनप्लेस फ्लोर डिवीजन |
%= | imod(x, y) | इनप्लेस मॉड्यूलो |
**= | ipow(x, y) | इनप्लेस पावर |
+= (सीक्वेंस) | iconcat(x, y) | इनप्लेस कॉनकैटनेशन |
उदाहरण
import operator
print(operator.iadd(9, 18)) # 27
print(operator.isub(9, 18)) # -9
print(operator.imul(9, 18)) # 162
print(operator.itruediv(9, 18)) # 0.5
print(operator.imod(9, 18)) # 9
print(operator.iconcat("Tutorials", "Point")) # TutorialsPoint
print(operator.ipow(2, 6)) # 64
स्टैंडर्ड ऑपरेटर्स और फ़ंक्शन मैपिंग
operator मॉड्यूल सभी स्टैंडर्ड ऑपरेटर्स के लिए फ़ंक्शन प्रदान करता है:
| ऑपरेशन | सिंटैक्स | operator फ़ंक्शन |
|---|---|---|
| एडिशन | x + y | add(x, y) |
| सब्ट्रैक्शन | x - y | sub(x, y) |
| मल्टीप्लिकेशन | x * y | mul(x, y) |
| डिवीजन | x / y | truediv(x, y) |
| फ्लोर डिवीजन | x // y | floordiv(x, y) |
| मॉड्यूलो | x % y | mod(x, y) |
| पावर | x ** y | pow(x, y) |
| कॉनकैटनेशन | seq1 + seq2 | concat(seq1, seq2) |
| कंटेनमेंट टेस्ट | obj in seq | contains(seq, obj) |
| इंडेक्सिंग | obj[k] | getitem(obj, k) |
| स्लाइसिंग | seq[i:j] | getitem(seq, slice(i, j)) |
| एट्रिब्यूट एक्सेस | obj.attr | getattr(obj, 'attr') |
| नेगेशन | -x | neg(x) |
| लॉजिकल NOT | not x | not_(x) |
| बिटवाइज़ AND | x & y | and_(x, y) |
| बिटवाइज़ OR | x | y | or_(x, y) |
| बिटवाइज़ XOR | x ^ y | xor(x, y) |
| लेफ्ट शिफ्ट | x << y | lshift(x, y) |
| राइट शिफ्ट | x >> y | rshift(x, y) |
महत्वपूर्ण अंतर
- म्यूटेबल ऑब्जेक्ट्स (लिस्ट, डिक्ट, सेट): इनप्लेस ऑपरेटर्स वास्तव में ऑब्जेक्ट मॉडिफाई करते हैं।
- इम्यूटेबल ऑब्जेक्ट्स (इंट, स्ट्रिंग, टपल):
+=नया ऑब्जेक्ट बनाता है और वेरिएबल को रीबाइंड करता है (दिखने में इनप्लेस लगता है, लेकिन वास्तव में नहीं)। operator.iaddआदि म्यूटेबल ऑब्जेक्ट्स पर इनप्लेस मॉडिफिकेशन करते हैं, इम्यूटेबल पर नया ऑब्जेक्ट लौटाते हैं।
उदाहरण: लिस्ट पर इनप्लेस vs स्टैंडर्ड
lst1 = [1, 2, 3]
lst2 = lst1
lst1 += [4, 5] # इनप्लेस: lst1 और lst2 दोनों प्रभावित
print(lst1, lst2) # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
lst1 = [1, 2, 3]
lst2 = lst1
lst1 = lst1 + [4, 5] # स्टैंडर्ड: नई लिस्ट बनती है
print(lst1, lst2) # [1, 2, 3, 4, 5] [1, 2, 3]