मुझे यह जानने की जरूरत है कि अजगर में + क्या करता है। यह इत्ना आसान है। मैं अजगर में अन्य लघु हाथ उपकरणों की परिभाषाओं के लिंक की भी सराहना करूंगा।
मुझे यह जानने की जरूरत है कि अजगर में + क्या करता है। यह इत्ना आसान है। मैं अजगर में अन्य लघु हाथ उपकरणों की परिभाषाओं के लिंक की भी सराहना करूंगा।
जवाबों:
पायथन में, + = __iadd__
विशेष विधि के लिए चीनी कोटिंग है , __add__
या __radd__
यदि __iadd__
मौजूद नहीं है। __iadd__
एक वर्ग की विधि वह कुछ भी कर सकती है जो वह चाहती है। सूची ऑब्जेक्ट इसे लागू करता है और इसका उपयोग एक पुनरावृत्त वस्तु पर पुनरावृति करने के लिए करता है जो प्रत्येक तत्व को उसी तरह से जोड़ते हैं जिस तरह से सूची का विस्तार विधि करता है।
यहां एक सरल कस्टम वर्ग है जो __iadd__
विशेष विधि को लागू करता है । आप ऑब्जेक्ट को एक इंट के साथ इनिशियलाइज़ करते हैं, फिर नंबर जोड़ने के लिए + = ऑपरेटर का उपयोग कर सकते हैं। मैंने __iadd__
यह दिखाने के लिए एक प्रिंट स्टेटमेंट जोड़ा है कि उसे कॉल किया जाता है। साथ ही, __iadd__
किसी वस्तु को वापस करने की उम्मीद की जाती है, इसलिए मैंने खुद को जोड़ दिया और दूसरी संख्या को जोड़ दिया जो इस मामले में समझ में आता है।
>>> class Adder(object):
def __init__(self, num=0):
self.num = num
def __iadd__(self, other):
print 'in __iadd__', other
self.num = self.num + other
return self.num
>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5
उम्मीद है की यह मदद करेगा।
__iadd__
एक अलग प्रकार (जो स्वयं योग करने योग्य है)
x += 5
x = x + 5
पायथन में कहने जैसा बिल्कुल नहीं है ।
यहाँ ध्यान दें:
In [1]: x = [2,3,4]
In [2]: y = x
In [3]: x += 7,8,9
In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]
In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]
In [6]: x += [44,55]
In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]
In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]
In [9]: x = x + [33,22]
In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]
In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]
संदर्भ के लिए देखें: सूचियों पर अप्रत्याशित रूप से व्यवहार क्यों होता है?
x += 7,8,9
+=
चर में एक संख्या जोड़ता है, चर को प्रक्रिया में बदल देता है (जबकि +
ऐसा नहीं होगा)। इसके समान, निम्नलिखित भी हैं जो चर को संशोधित करते हैं:
-=
, चर से एक मूल्य घटाता है, चर को परिणाम पर सेट करता है*=
, चर और एक मूल्य को गुणा करता है, जिससे परिणाम चर होता है/=
, चर को मूल्य से विभाजित करता है, जिससे परिणाम चर बन जाता है%=
, चर पर मापांक करता है, चर के साथ फिर इसके परिणाम पर सेट किया जाता हैऔर भी हो सकते हैं। मैं पायथन प्रोग्रामर नहीं हूं।
&=
, >>=
, आदि) और अतिरिक्त गणित ऑपरेटरों ( **=
, आदि)।
यह दाईं ओर के ऑपरेंड को बाईं ओर जोड़ता है। x += 2
माध्यमx = x + 2
यह तत्वों को एक सूची में भी जोड़ सकता है - यह SO थ्रेड देखें ।
यह एक मात्र वाक्य्यात्मक शॉर्टकट नहीं है। इसे इस्तेमाल करे:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
बनाम
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
यह दिखाता है कि + = iadd सूची विधि को आमंत्रित करता है लेकिन + चालान जोड़ता है , जो सूचियों के साथ अलग-अलग काम करते हैं।
विशेष रूप से a + = b "a" परिणाम को स्टोर करने के लिए "b" जोड़ता है। यह सरलीकृत वर्णन कई भाषाओं में + = ऑपरेटर का वर्णन करेगा।
हालाँकि सरलीकृत वर्णन कुछ सवालों को उठाता है।
अजगर में इन दोनों सवालों के जवाब डेटा के प्रकार पर निर्भर करते हैं।
तो वास्तव में "जोड़ने" का क्या मतलब है?
ध्यान दें कि सूचियों के लिए + = की तुलना में अधिक लचीला है, एक सूची में + ऑपरेटर को दूसरी सूची की आवश्यकता होती है, लेकिन + = ऑपरेटर किसी भी स्वीकार्य को स्वीकार करेगा।
तो क्या करता है "एक मतलब में मूल्य भंडारण"?
यदि ऑब्जेक्ट उत्परिवर्तनीय है, तो इसे जगह में संशोधन करने के लिए प्रोत्साहित किया जाता है (लेकिन आवश्यक नहीं)। तो उसी वस्तु के लिए एक अंक जो उसने पहले किया था लेकिन उस वस्तु में अब अलग सामग्री है।
यदि ऑब्जेक्ट अपरिवर्तनीय है, तो यह स्पष्ट रूप से संशोधन को अंदर नहीं कर सकता है। कुछ उत्परिवर्तनीय वस्तुओं में इन-प्लेस "ऐड" ऑपरेशन का कार्यान्वयन नहीं हो सकता है। इस मामले में परिवर्ती "a" को एक नई वस्तु के लिए इंगित किया जाएगा जिसमें एक अतिरिक्त ऑपरेशन का परिणाम होगा।
तकनीकी रूप से इसे __IADD__
पहले की तलाश में लागू किया जाता है , यदि इसे लागू नहीं किया जाता है तो __ADD__
कोशिश की जाती है और अंत में __RADD__
।
चर पर अजगर में + = का उपयोग करते समय देखभाल की आवश्यकता होती है, जहां हम सटीक प्रकार के बारे में निश्चित नहीं हैं और विशेष रूप से जहां हम निश्चित नहीं हैं कि क्या प्रकार परिवर्तनशील है या नहीं। उदाहरण के लिए निम्नलिखित कोड पर विचार करें।
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
जब हम एक टफल के साथ डस्टफ को आमंत्रित करते हैं तो ट्यूपल को + = ऑपरेशन के भाग के रूप में कॉपी किया जाता है और इसलिए बी अप्रभावित रहता है। हालाँकि जब हम इसे सूची में शामिल करते हैं तो सूची को संशोधित किया जाता है, इसलिए a और b दोनों प्रभावित होते हैं।
अजगर 3 में, "बाइट्स" और "बायट्रेयर" प्रकारों के साथ समान व्यवहार देखा जाता है।
अंत में ध्यान दें कि वस्तु को प्रतिस्थापित न करने पर भी पुनर्मूल्यांकन होता है। यह ज्यादा मायने नहीं रखता है अगर बाएं हाथ की तरफ केवल एक चर है लेकिन यह भ्रामक व्यवहार का कारण बन सकता है जब आपके पास एक अपरिवर्तनीय संग्रह है जो उदाहरण के लिए उत्परिवर्तित संग्रह का संदर्भ देता है:
a = ([1,2],[3,4])
a[0] += [5]
इस मामले में [५] को एक [०] द्वारा निर्दिष्ट सूची में सफलतापूर्वक जोड़ा जाएगा, लेकिन बाद में एक अपवाद उठाया जाएगा जब कोड कोशिश करता है और एक [०] को आश्वस्त करने में विफल रहता है।
संक्षिप्त उत्तर का +=
अनुवाद "+ = के बाईं ओर चर में + = के दाईं ओर जो कुछ भी है उसे जोड़ें" के रूप में किया जा सकता है।
पूर्व। यदि आपके पास है a = 10
तो a += 5
होगा: a = a + 5
तो, "ए" अब 15 के बराबर है।
नोट कुछ स्थितियों में x += y
समान नहीं है, x = x + y
जहां ऑपरेटर की पूर्वता के कारण एक अतिरिक्त ऑपरेटर को शामिल किया जाता है, इस तथ्य के साथ कि दाहिने हाथ की ओर हमेशा पहले मूल्यांकन किया जाता है, जैसे।
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
ध्यान दें कि पहले मामले का विस्तार:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
आपको अन्य ऑपरेटरों के साथ 'वास्तविक दुनिया' में इसका सामना करने की अधिक संभावना है, जैसे
x *= 2 + 1
== x = x * (2 + 1)
! =x = x * 2 + 1
जैसा कि दूसरों ने भी कहा, + = ऑपरेटर एक शॉर्टकट है। एक उदाहरण:
var = 1;
var = var + 1;
#var = 2
यह भी लिखा जा सकता है:
var = 1;
var += 1;
#var = 2
इसलिए पहला उदाहरण लिखने के बजाय, आप सिर्फ दूसरा लिख सकते हैं, जो ठीक काम करेगा।
मैं बहुत सारे उत्तर देख रहा हूं जो कई पूर्णांक के साथ + = का उपयोग नहीं करते हैं।
एक उदाहरण:
x -= 1 + 3
यह इस तरह होगा:
x = x - (1 + 3)
और नहीं:
x = (x - 1) + 3
प्रलेखन के अनुसार
x += y
के बराबर हैx = operator.iadd(x, y)
। इसे कहने का एक और तरीका यह है किz = operator.iadd(x, y)
यह यौगिक कथन के बराबर हैz = x; z += y
।
तो x += 3
जैसा है वैसा ही है x = x + 3
।
x = 2
x += 3
print(x)
आउटपुट 5 होगा।
ध्यान दें कि वहाँ भी है
object.__iadd__