यह एक ऑपरेशन है; इससे पहले बाएं हाथ के काम लागू किया जाता है दाएँ हाथ अभिव्यक्ति मूल्यांकन किया जाता है:
>>> a, b = 10, 20
>>> a, b
(10, 20)
>>> b, a = a, b
>>> a, b
(20, 10)
>>> a, b = a*b, a/b
>>> a, b
(200, 2)
या, यदि आप मल्टी-थ्रेडेड वातावरण के बारे में बात कर रहे हैं, तो काम है नहीं परमाणु; दुभाषिया एक भी opcode के साथ एक टपल काम का मूल्यांकन करता है, लेकिन अलग opcodes का उपयोग करता है तो प्रत्येक प्रभावित चर में परिणाम स्टोर करने के लिए: के लिए
>>> def t(self): a,b=20,20
...
>>> dis.dis(t)
1 0 LOAD_CONST 2 ((20, 20))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 1 (a)
9 STORE_FAST 2 (b)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
हालांकि, सामान्य असाइनमेंट हमेशा कम से कम दो opcodes होने जा रहा है (एक दाईं ओर अभिव्यक्ति, परिणाम को संग्रहित करने के लिए एक), इसलिए सामान्य में सामान्य आकलन परमाणु नहीं है। अनुक्रम अनपॅकिंग कोई अलग नहीं है।
स्रोत
2012-11-30 17:04:04
मैं इस धारणा के तहत हूं कि आप आमतौर पर सॉफ़्टवेयर विकास में परमाणुता द्वारा * सामान्य रूप से समझने के द्वारा गलतफहमी कर रहे हैं। क्या आप यहां थ्रेड सुरक्षा के बारे में बात कर रहे हैं, या आप सोच रहे हैं कि 'बी = डी' से पहले' ए = सी 'निष्पादित किया जाएगा या नहीं? –
@MartijnPieters - यदि ओपी बाद के बारे में सोच रहा था, तो ओपी बहुत उलझन में होगा क्यों '(ए, बी) = (बी, ए)' कुछ वैल्यू स्वैप करने के लिए काम करेगा। यह थ्रेड सुरक्षा के बारे में एक सवाल होना चाहिए। –
@TedHopp: सवाल यह कहने के लिए बहुत अस्पष्ट है, और मेरे अनुभव में अनपॅकिंग में उलझन में बहुत भ्रम पैदा होता है। –