यह पायथन में उस तरह से काम नहीं करता है। अजगर वस्तुओं का संदर्भ देता है। आपके फ़ंक्शन के अंदर आपके पास एक ऑब्जेक्ट है - आप उस ऑब्जेक्ट (यदि संभव हो) को म्यूट करने के लिए स्वतंत्र हैं। हालाँकि, पूर्णांक अपरिवर्तनीय हैं । एक समाधान एक कंटेनर में पूर्णांक को पास करना है जिसे उत्परिवर्तित किया जा सकता है:
def change(x):
x[0] = 3
x = [1]
change(x)
print x
यह सबसे अच्छा बदसूरत / अनाड़ी है, लेकिन आप पायथन में कोई बेहतर नहीं करने जा रहे हैं। इसका कारण यह है कि पायथन में, असाइनमेंट ( =
) राइट हैंड साइड का परिणाम है जो भी वस्तु लेता है और जो कुछ भी बाएं हाथ की तरफ है उसे बांधता है * (या इसे उपयुक्त फ़ंक्शन में पास करता है)।
इसे समझते हुए, हम देख सकते हैं कि किसी फ़ंक्शन के अंदर किसी अपरिवर्तनीय वस्तु के मूल्य को बदलने का कोई तरीका नहीं है - आप इसकी किसी भी विशेषता को नहीं बदल सकते क्योंकि यह अपरिवर्तनीय है, और आप "चर" को एक नया नहीं सौंप सकते मूल्य क्योंकि तब आप वास्तव में एक नई वस्तु (जो पुराने से अलग है) बना रहे हैं और यह नाम दे रहे हैं कि पुरानी वस्तु स्थानीय नामस्थान में थी।
आमतौर पर वर्कअराउंड केवल उस ऑब्जेक्ट को वापस करना है जिसे आप चाहते हैं:
def multiply_by_2(x):
return 2*x
x = 1
x = multiply_by_2(x)
* ऊपर के पहले उदाहरण के मामले में, 3
वास्तव में पास हो जाता है x.__setitem__
।