जब तक आप इसका आउटपुट असाइन नहीं करते, पायथन स्ट्रिंग पद्धति को कॉल करना कुछ भी क्यों नहीं है?


136

मैं एक साधारण स्ट्रिंग प्रतिस्थापन करने की कोशिश करता हूं, लेकिन मुझे नहीं पता कि यह काम क्यों नहीं करता है:

X = "hello world"
X.replace("hello", "goodbye")

मैं शब्द को बदलना चाहते हैं helloकरने के लिए goodbye, इस प्रकार यह स्ट्रिंग बदलना चाहिए "hello world"करने के लिए "goodbye world"। लेकिन एक्स सिर्फ बनी हुई है "hello world"। मेरा कोड काम क्यों नहीं कर रहा है?

जवाबों:


232

ऐसा इसलिए है क्योंकि पायथन में तार अपरिवर्तनीय हैं

जिसका अर्थ है कि किए गए प्रतिस्थापन के साथ एक प्रतिX.replace("hello","goodbye") लौटाता है । उसके कारण आपको इस पंक्ति को बदलने की आवश्यकता है:X

X.replace("hello", "goodbye")

इस लाइन के साथ:

X = X.replace("hello", "goodbye")

अधिक विस्तृत रूप, यह सब अजगर स्ट्रिंग तरीकों कि एक स्ट्रिंग की सामग्री "यथा-स्थान" बदलने के लिए सच है , उदाहरण के लिए replace, strip, translate, lower/ upper, join...

यदि आप इसका उपयोग करना चाहते हैं और इसे फेंकना नहीं चाहते हैं, तो आपको उनके आउटपुट को कुछ को सौंपना होगा , जैसे

X  = X.strip(' \t')
X2 = X.translate(...)
Y  = X.lower()
Z  = X.upper()
A  = X.join(':')
B  = X.capitalize()
C  = X.casefold()

और इसी तरह।


1
पद्यात्मक बिंदु: तार x += 'a'विशेष मामले के लिए उत्परिवर्तित हो सकते हैं , जैसे stackoverflow.com/a/40996908/6260170
क्रिस '

@ क्रिस_रैंड्स: लगता है कि आप सही हैं, लेकिन बाहर से इसका वास्तविक उत्परिवर्तन प्रभाव नहीं होता है - कुछ कार्यान्वयन जांचते हैं कि क्या यह वास्तव में उपयोग किया जाता है, और यदि नहीं (तो उत्परिवर्तन नहीं देखा जाएगा), यह वास्तव में उत्परिवर्तित करेगा। क्या यह सच है?
टाडेक

@ टैडेक वैसे मुझे लगता है कि यह वास्तविक है, लेकिन यह केवल एक सीपीथोन ऑप्टिमाइज़ेशन है और सीधे यहां प्रासंगिक नहीं है (इसीलिए मैंने कहा कि मुझे पांडित्य हो रहा है)
क्रिस_रंड्स

0

सभी स्ट्रिंग कार्यों के रूप में lower, upper, stripमूल को संशोधित किए बिना एक स्ट्रिंग लौट रहे हैं। यदि आप एक स्ट्रिंग को संशोधित करने का प्रयास करते हैं, जैसा कि आप सोच सकते हैं well it is an iterable, तो यह विफल हो जाएगा।

x = 'hello'
x[0] = 'i' #'str' object does not support item assignment

स्ट्रिंग के अपरिवर्तनीय होने के महत्व के बारे में एक अच्छी रीडिंग है: पायथन स्ट्रिंग्स अपरिवर्तनीय क्यों हैं? उनका उपयोग करने के लिए सर्वोत्तम अभ्यास

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.