2013-05-07 12 views
6

में एक साथ काम अर्थ विज्ञान पर विचार करें निम्नलिखित पायथन 3 कोड:अजगर

a = [-1,-1,-1] 
i = 0 

और अब निम्न दो दोनों एक से अधिक एक साथ काम के संस्करणों और मैं पर विचार करें:

असाइनमेंट संस्करण 1:

a[i],i = i,i+1 

असाइनमेंट संस्करण 2:

i,a[i] = i+1,i 

मैं अपेक्षा करता हूं कि एक साथ असाइनमेंट के इन दो संस्करणों को अर्थात् समकक्ष समझा जा सके।

print(a,i) के लिए उत्पादन के बाद काम संस्करण 1:

[0, -1, -1] 1 

print(a,i) के लिए उत्पादन के बाद काम संस्करण 2 हालांकि, अगर आप एक साथ कार्य में से हर एक के बाद एक के मूल्यों और मैं जाँच, आप अलग-अलग राज्यों मिल :

[-1, 0, -1] 1 

मैं पायथन के अर्थशास्त्र पर एक विशेषज्ञ नहीं हूं, लेकिन यह व्यवहार अजीब लगता है।

Link to book excerpt in Google Books

वहाँ है कुछ मैं के बारे में याद आ रही है: मैं दोनों कार्य इसके अलावा काम संस्करण 1. के रूप में व्यवहार करने के लिए, यदि आप नीचे दिए गए लिंक की जाँच, एक दोनों काम संस्करण एक ही राज्य के लिए नेतृत्व की उम्मीद करेंगे उम्मीद करेंगे एक साथ असाइनमेंट के लिए पायथन अर्थशास्त्र?

नोट: यह अजीब व्यवहार पुन: उत्पन्न नहीं होता है, उदाहरण के लिए, जब परिवर्तनीय a में पूर्णांक प्रकार होता है; ऐसा लगता है कि टाइप सूची होने के लिए a की आवश्यकता है (शायद यह किसी भी उत्परिवर्तनीय प्रकार का मामला है?)।

उत्तर

7

इस मामले में:

i, a[i] = i + 1, i 

दाईं ओर स्थित एक टपल का मूल्यांकन (1, 0)। इस tuple को i और फिर a[i] पर अनपॅक किया गया है। a[i] का मूल्यांकन के दौरान अनपॅकिंग के पहले किया गया है, पहले नहीं, इसलिए a[1] से मेल खाता है।

के बाद से दाईं ओर स्थित मूल्यांकन किया जाता है से पहले किसी भी unpacking जगह लेता है, दाईं ओर स्थित a[i] की चर्चा करते हुए हमेशा i

यहाँ के अंतिम मूल्य की परवाह किए बिना a[0] होगा आप बाहर काम करने के

के लिए एक और बेकार मज़ा उदाहरण है
>>> a = [0,0,0,0] 
>>> i, a[i], i, a[i] = range(4) 
>>> a 
[1, 0, 3, 0] 
+0

धन्यवाद, धन्यवाद, मैं आपके द्वारा ट्यूपल्स के मूल्यांकन के बारे में तकनीकी बिंदु देखता हूं; उस दृष्टिकोण से सभी सही समझ में आता है। हालांकि, मैं अभी भी एक अर्थशास्त्र दृष्टिकोण से नुकसान में हूं क्योंकि तब से _simultaneous_ असाइनमेंट सेमेन्टिक्स बहुत ही साथ नहीं है। चूंकि मैं पाइथन के लिए नया हूं, इसलिए मैं अपनी संभावनाएं लेता हूं और पूछता हूं कि पाइथन के लिए असाइनमेंट सेमेन्टिक्स की औपचारिक/अर्द्ध औपचारिक परिभाषा के साथ कोई आधिकारिक दस्तावेज है या नहीं। क्या आप इस तरह के किसी दस्तावेज़ के बारे में जानते हैं? – hquilo

+2

@ hquilo: "एक साथ असाइनमेंट" भी पाइथन दस्तावेज़ में प्रकट नहीं होता है। 'ए, बी = 1, 2' '(ए, बी) = (1, 2)' के लिए सिर्फ लघुरूप है, जिसे अनुक्रम अनपॅकिंग कहा जाता है। – Blender

+0

@gnibler और @ ब्लेंडर दोनों का धन्यवाद; आपके उत्तर चीजों को स्पष्ट करते हैं। – hquilo