2012-07-20 6 views
7

मुझे लगता है कि होता है कि अगर मैं अजगर में निम्न कोड कियाक्यों var = [0] .extend (रेंज (1,10)) पायथन में काम नहीं करता है?

var = [0].extend(range(1,10)) 

तो var मान 0 के साथ एक सूची होगा - 9 उस में।

क्या देता है?

+2

विस्तार सूची को बदलता है लेकिन कुछ भी नहीं देता = var –

उत्तर

3

के रूप में ऑस्कर लोपेज और दूसरों को पहले से ही समझा दिया है, का विस्तार एक आदेश है, जो कोई नहीं देता है, आदेश/क्वेरी जुदाई का पालन करने के लिए है।

वे सभी एक कमांड के रूप में विस्तार, के रूप में इरादा उपयोग करके यह तय करने का सुझाव दिया है। लेकिन एक विकल्प है: इसके बजाय एक क्वेरी का उपयोग करें:

>>> var = [0] + range(1, 10) 

यहां अंतर को समझना महत्वपूर्ण है। extend आपके [0] को संशोधित करता है, इसे [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] में बदल देता है। लेकिन + ऑपरेटर अकेले आपके [0] छोड़ देता है, और एक नई सूची [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] देता है।

मामलों में जहां आप सूची में अन्य संदर्भ मिला है और उन सब को बदलना चाहते हैं में, जाहिर है आप extend की जरूरत है।

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

10

list.extend एक में जगह विधि है। यह ऑब्जेक्ट पर अपनी क्रिया करता है और None देता है।

यह काम करेगा:

var = list(range(10)) 
6

extend() कुछ भी (वास्तव में None), यह परिवर्तन "यथा-स्थान" करता है वापस नहीं करता है, अर्थात्:

var = [0] 
var.extend(range(1, 10)) 

भी अच्छी बात यह होगी , सूची स्वयं संशोधित है।

मुझे लगता है कि आप इस के बाद कर रहे हैं:

>>> var = [0] 
>>> var.extend(range(1, 10)) 
>>> var 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
+0

@nightcracker। संपादन के लिए धन्यवाद - आईपीथन पसंद नहीं है? ;-) – Levon

+0

कभी भी इसका इस्तेमाल नहीं किया या देखा, इसलिए मैंने सोचा कि यह कुछ सिंटैक्स बनाया गया था। इसलिए मैंने अधिक सामान्य रूप से ज्ञात सीपीथन प्रारूप में संपादित किया। – orlp

+0

@nightcracker यह वास्तव में शक्तिशाली (और भयानक) पाइथन शेल देखने योग्य है .. http://ipython.org/ .. मैं इसे थोड़ी देर के लिए उपयोग कर रहा हूं, लेकिन इसके बारे में नई विशेषताएं खोज रहा हूं।मुझे पता है कि दूसरों ने इसका भी उपयोग किया है क्योंकि मैं उन्हें अपने कोड को पेस्ट भी देखता हूं। (मैं आमतौर पर वापस जाता हूं और [] आदि लेता हूं .. इसलिए मेरे लिए ऐसा करने के लिए धन्यवाद) – Levon

4

प्रश्न में कोड के लिए काम करने के लिए, तो आप इस तरह कुछ करने के लिए आवश्यकता होगी:

>>> var = [0] 
>>> var.extend(range(1,10)) 
>>> var 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

यह पहले काम कर रहा था क्योंकि extend()None देता है, और यह डिज़ाइन द्वारा है: पायथन Command/Query Separation का पालन कर रहा है।

+1

+1 मुझे कमांड/क्वेरी सेपरेशन के बारे में सिखाए जाने के लिए +1। मैंने पहले उस शब्द के बारे में नहीं सुना था। –

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