2011-05-06 14 views

उत्तर

7

वास्तव में नहीं। आप कई चर सेट करने के लिए x = y = 0 कर सकते हैं, लेकिन पाइथन जैसे समांतर असाइनमेंट नहीं।

+0

यह 'x = 0 का उपयोग करने जैसा ही है; वाई = 0; '? मेरा मतलब है कि जेआईटी-संकलन के दौरान। –

+0

हां, जेनरेट कोड बिल्कुल वही है। –

+4

दाएं-बाएं मूल्यांकन के आधार पर, यह होना चाहिए: 'y = 0; x = y; 'अन्यथा,' x = y = नया ऑब्जेक्ट(); 'वास्तव में दो ऑब्जेक्ट्स बनाएगा? – loungerdork

2

int[] list = {1,2,3} आज़माएं। यह क्रमशः मान 1, 2 और 3 के साथ एक पूर्णांक सरणी बनाता है।

+1

आपको '{...' – corsiKa

+3

से पहले 'नया int [] 'की आवश्यकता होगी असल में आपको सरणी प्रारंभकर्ता से पहले' नया int [] 'की आवश्यकता नहीं है, कम से कम जब सरणी प्रारंभकर्ता नहीं है एक असाइनमेंट के दाएं हाथ। –

6

पायथन के कई काम इस तरह, में काफी शक्तिशाली है कि यह भी समानांतर काम के लिए इस्तेमाल किया जा सकता है:

(x,y) = (y,x) # Swap x and y 

जावा में समानांतर कार्य के लिए कोई समकक्ष नहीं है;

int a = 1, b = 2, c = 3; 

या एक सरणी से मैप करने के लिए, आप यह कर सकते हैं:

t = x; x = y; y = t; 

आप इस तरह एक पंक्ति में भाव से कई चर असाइन कर सकते हैं: आप एक अस्थायी चर का उपयोग करना होगा:

:

int a = array[0], b = array[1], c = array[2]; 

यह भी अत्यधिक शब्द लगता है, आप अस्थायी रूप से काम करने के लिए अपने सरणी के लिए एक एक अक्षर का संदर्भ बना सकते हैं

int[] t = array; 
int a = t[0], b = t[1], c = t[2]; 

प्रश्न की जड़ को और अधिक प्राप्त करना, एकाधिक असाइनमेंट उन स्थितियों में पाइथन में आसान होता है जहां कोड कई संबंधित चर (शायद विभिन्न प्रकारों के) एक सूची या सरणी में एक साथ गुजर रहा है। जावा (या सी/सी ++) में, ऐसा करने के लिए अधिक बेवकूफ तरीका इन चरों को एक साथ बंडल करने के लिए एक छोटी डेटा कक्षा (या संरचना) बनाना होगा, और निर्माता और उपभोक्ता दोनों इसका उपयोग करेंगे। फिर आप इस तरह, नाम से करने के बजाय सूचकांक द्वारा क्षेत्रों का उल्लेख कर सकते हैं:

class Foo { 
    public int a; 
    public int b; 
    public int c; 
} 

/* ... */ 

Foo produceFoo() { 
    Foo f = new Foo(); 
    f.a = 1; 
    f.b = 2; 
    f.c = 3; 
    return f; 
} 

/* ... */ 

Foo f = produceFoo(); 
System.out.println(f.a + "," + f.b + "," + f.c); 

यह भी है कि फू व्यवहार के साथ एक वास्तविक वर्ग निजी डेटा बनाने के लिए और समझाया जाएगा दरवाजे पर बाद में रिफैक्टरिंग खोलता है, न सिर्फ एक डेटा कक्षा।

1

समानांतर असाइनमेंट जावा में जोड़ना मुश्किल नहीं होगा, हमने वास्तव में इसे हमारे ऑप्टिमाज भाषा एक्सटेंशन में लागू किया है। लेकिन यह सिर्फ वहां नहीं है।

जैसा कि डेरिक का उल्लेख है, परमाणु स्वैप विवरण के लिए समांतर असाइनमेंट की आवश्यकता है।

आप समानांतर असाइनमेंट कहलाते हैं, "विनाशकारी असाइनमेंट" नामक एक और सामान्य अवधारणा का एक उदाहरण है: आपके पास कुछ संरचना है, और आप इसके कुछ हिस्सों को चर से मेल खाते हैं।

मान लीजिए आप tuples एम्बेडेड है, तो destructing काम किसी भी स्तर पर डेटा निकालने कर सकते हैं:

(x, (y, z)) = ((1, 2, 3), (4, (5, 6))) 
// x = (1, 2, 3) 
// y = 4 
// z = (5, 6) 

मान लीजिए आप एक सूची या एक सेट है, तो destructuring काम उप-सूचियों या सबसेट (एक्स एक तत्व के लिए खड़ा है निकाल सकते हैं है , एक्स * एक उपन्यास के लिए खड़ा है):

[ x, y*, z ] = [ 1, 2, 3, 4 ] 
// x = 1 
// y = [ 2, 3 ] 
// z = 4 

जाहिर है सूचियों और सेटों को टुपल्स के साथ एम्बेड किया जा सकता है। यह सरल योजना बहुत शक्तिशाली प्रोग्रामिंग अबास्ट्रक्शन प्रदान करती है, जैसे ही आपको डेटा निकालने की आवश्यकता होती है।

संबंधित मुद्दे