2012-04-22 18 views
6
def change(s): 
    s = s + "!" 


word = "holiday" 
change(word)  
print word 

"आउटपुट" के बजाय इसका "छुट्टी" कैसे आ रहा है? क्या ऐसा इसलिए है क्योंकि कोड की 3 पंक्ति फ़ंक्शन के बाहर हैं? यदि हां, तो यह क्यों मायने रखता है कि यह फ़ंक्शन के बाहर है क्योंकि यह परिवर्तन फ़ंक्शन के बाद है?तारों को जोड़ना?

+1

यह अधिक आम तौर पर अपनी स्थिति बताते हैं: http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference – jdi

+0

आपकी मदद के लिए धन्यवाद, JDI – alicew

उत्तर

6

इस प्रयास करें:

def change(s): 
    return s + "!" 

इस तरह यह प्रयोग करें:

word = 'holiday' 
print change(word) 

या इस तरह:

word = 'holiday' 
word = change(word) 
print word 

ध्यान रखें कि फ़ंक्शन के अंदर पैरामीटर स्ट्रिंग में आपके द्वारा किए गए किसी भी संशोधन फ़ंक्शन के बाहर नहीं देखा जाएगा, क्योंकि फ़ंक्शन में s पैरामीटर फ़ंक्शन के दायरे में स्थानीय है, और आपके द्वारा किए गए कोई भी परिवर्तन (जैसे प्रश्न में कोड में) केवल फ़ंक्शन के अंदर दिखाई देगा, बाहर नहीं। पायथन में सभी फ़ंक्शन पैरामीटर passed by value हैं।

+0

आपका बहुत बहुत धन्यवाद! :) – alicew

+0

@alicew आपका स्वागत है! कृपया अपने उत्तर के अंतिम पैराग्राफ में लिंक को पूरी तरह समझने के लिए पढ़ें कि आपके फ़ंक्शन के अंदर स्ट्रिंग के साथ क्या हो रहा है। –

+0

@alicew भी, कृपया सही के रूप में स्वीकार करने के लिए मत भूलना (बाईं ओर चेक मार्क पर क्लिक करें) जो उत्तर सबसे उपयोगी था –

1

आप परिवर्तन से मूल्य वापस नहीं कर रहे हैं।

प्रयास करें:

def change(s): 
    s = s + "!" 
    return s 


word = "holiday" 
word = change(word)  
print word 

इसलिए उपरोक्त उदाहरण में, रों संशोधित किया जा रहा है, और फिर शब्द संशोधित मूल्य पर पुन: सौंपा गया है।

3

आप केवल change फ़ंक्शन में स्थानीय चर s संशोधित कर रहे हैं। यह परिवर्तनीय word को संशोधित नहीं करता है। आप word को संशोधित करना चाहते हैं, तो आप word को change का परिणाम लौट सकते हैं और यह आवंटित करने के लिए की जरूरत है:

def change(s): 
    s = s + "!" 
    return s 


word = "holiday" 
word = change(word)  
print word 
1

आप शब्द की एक 'प्रतिलिपि' गुजर रहे हैं बल्कि कार्य के लिए शब्द उदाहरण। इसलिए परिवर्तन समारोह

+0

ठीक है, धन्यवाद! – alicew

+1

सच नहीं है। पायथन मूल्य के संदर्भ को पास करता है।वह एक स्थानीय एक – jdi

+0

के साथ परिवर्तनीय छायांकन कर रहा है और अधिक सही स्पष्टीकरण है; लेकिन दिए गए परिदृश्य में यह समझाने में मदद करता है कि छायांकन और विभिन्न क्षेत्रों के परिणामस्वरूप, ऐसा लगता है कि आप एक प्रतिलिपि – jbreicis

1

change(s) में s अंदर शब्द के प्रति रों चर में आप पकड़ पर लागू होते हैं एक ऐसा नाम है word का मूल्य के लिए बाध्य है जब आप change(word) कहते हैं।

लाइन s = s + "!" आप एक नया स्ट्रिंग जो s और ! करने के लिए बाध्य मूल्य श्रृंखलाबद्ध द्वारा बनाई गई है करने के लिए s बाध्यकारी हैं में, नहीं word के लिए कुछ भी कर रही है।

यह भी संभव है कि साइड इफेक्ट्स न हो, भले ही यह संभव हो तो नया मान वापस करना बेहतर है।

def change(s): 
    return s + '!' 
+1

आपकी मदद के लिए धन्यवाद :) – alicew

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