2010-02-06 9 views
8

में एकाधिक असाइनमेंट की विधि मैं कंप्यूटर विज्ञान में भविष्य के लिए तैयार करने के लिए कोशिश कर रहा हूँ, इसलिए मैं ECMAScript के साथ शुरू किया और अब मैं अजगर के बारे में अधिक जानने के लिए कोशिश कर रहा हूँ। ईसीएमएस्क्रिप्ट से आ रहा है, a, b, c = 1, 2, 3 जैसे कई असाइनमेंट देखकर मुझे एक पल के लिए परेशान छोड़ दिया जाता है, जब तक मुझे एहसास न हो कि कई असाइनमेंट चल रहे हैं। चीजों को थोड़ा स्पष्ट बनाने के लिए, मैं वास्तव में (a, b, c) = (1, 2, 3) करना चाहता हूं लेकिन मुझे यकीन नहीं है कि यह एक मापनीय प्रदर्शन हिट होगा या नहीं। जो मैं समझता हूं, उससे टुपल्स अनिवार्य रूप से कितने असाइनमेंट काम करते हैं, लेकिन दुनिया में बहुत सी विषमताएं हैं, इसलिए मैं कुछ भी नहीं मानने की कोशिश करता हूं।अजगर

अग्रिम धन्यवाद

+6

यहाँ कंप्यूटर विज्ञान में अपने भविष्य (मैं व्यापार में 30 साल के लिए किया गया है) के लिए एक संकेत है। इस तरह के अनुकूलन प्रश्न पर समय बिताना न करें जब तक आप ** ** ** साबित नहीं कर सकते कि एकाधिक असाइनमेंट स्टेटमेंट पूरी तरह से आपके प्रोग्राम को मार रहा है। जब तक आपके पास ** प्रमाण ** नहीं है कि कुछ अस्वीकार्य रूप से धीमा हो, इसका उपयोग करें। प्रदर्शन के बारे में चिंता किए बिना सब कुछ का प्रयोग करें। जो लोग पहले से ही इस बारे में चिंतित भाषा का आविष्कार करते हैं। –

उत्तर

11

इसका प्रदर्शन पर कोई प्रभाव नहीं होना चाहिए। कोष्ठक इसे एक tuple, अल्पविराम के काम नहीं करते हैं। तो (1,2,3) बिल्कुल 1,2,3

+0

आह ... मैंने इसके बारे में भी सोचा नहीं था। धन्यवाद। – Reid

1

एकाधिक असाइनमेंट को ट्यूपल पैकिंग और टुपल अनपॅकिंग के संयोजन के रूप में लागू किया गया है, मेरे ज्ञान के लिए, इसलिए इसका भी प्रभाव होना चाहिए।

2

यह भी सूचियों के लिए काम करता है:

a, b, c = [1, 2, 3] 

काम करता है बस के रूप में अच्छी तरह से

+1

और इसे पायथन में 'अनपॅकिंग' कहा जाता है –

13

यह जाँच करने के लिए बहुत आसान है, dis मॉड्यूल के साथ:

>>> import dis 
>>> dis.dis(compile('a,b,c=1,2,3','','exec')) 
    1   0 LOAD_CONST    4 ((1, 2, 3)) 
       3 UNPACK_SEQUENCE   3 
       6 STORE_NAME    0 (a) 
       9 STORE_NAME    1 (b) 
      12 STORE_NAME    2 (c) 
      15 LOAD_CONST    3 (None) 
      18 RETURN_VALUE   
>>> dis.dis(compile('(a,b,c)=(1,2,3)','','exec')) 
    1   0 LOAD_CONST    4 ((1, 2, 3)) 
       3 UNPACK_SEQUENCE   3 
       6 STORE_NAME    0 (a) 
       9 STORE_NAME    1 (b) 
      12 STORE_NAME    2 (c) 
      15 LOAD_CONST    3 (None) 
      18 RETURN_VALUE   
>>> 

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

>>> dis.dis(compile('(((a,b,c)))=(((1,2,3)))','','exec')) 
    1   0 LOAD_CONST    4 ((1, 2, 3)) 
       3 UNPACK_SEQUENCE   3 
       6 STORE_NAME    0 (a) 
       9 STORE_NAME    1 (b) 
      12 STORE_NAME    2 (c) 
      15 LOAD_CONST    3 (None) 
      18 RETURN_VALUE   
>>> 

छह जोड़े (या किसी भी संख्या, वास्तव में) अभी भी बिल्कुल वैसा ही कोड का उत्पादन। एक बार जब आप अनावश्यक कोष्ठकों के स्पष्ट न्यूनतम संख्या छोड़ देते हैं (बिल्कुल भी नहीं: वे अनावश्यक हैं सब के बाद ;-), वास्तव में जहां आप रोकूँ -) और वहाँ क्यों, अभी तक एक और अधिक जोड़ने के जब यह "मुक्त" है जोड़ी ... या दो ... या तीन ...? -)