मेरे पास अजगर कार्यों में दायरे के बारे में एक प्रश्न है। मैंने एक उदाहरण शामिल किया है जो मेरे द्वारा जारी किए गए मुद्दे को प्रदर्शित करता है।पायथन फ़ंक्शन स्कोप
fun0 varible ग की सूची में पहले प्रवेश को पुनर्परिभाषित। यह परिवर्तन fun0 के बाहर परिलक्षित होता है, भले ही मैं fun0 से कोई मान वापस नहीं लौटाता।
fun1 चर ग पूरी तरह से पुनर्परिभाषित करता है, लेकिन परिवर्तन fun1 के बाहर प्रतिबिंबित नहीं होता है। इसी तरह, fun2 redefines c, और परिवर्तन fun2 के बाहर दिखाई नहीं देता है।
मेरा प्रश्न है, क्यों fun0 संशोधित करता है val3मुख्य समारोह में, जबकि fun1 और fun2val4 और val7 क्रमश: संशोधित नहीं करते हैं?
def fun0(a, b, c):
c[0] = a[0] + b[0]
return
def fun1(a, b, c):
c = a[0] + b[0]
return
def fun2(a, b, c):
c = a + b
return
def main():
val1 = ['one']
val2 = ['two']
val3 = ['']
fun0(val1, val2, val3)
print val3
val4 = []
fun1(val1, val2, val4)
print val4
val5 = 1
val6 = 1
val7 = 0
fun2(val5, val6, val7)
print val7
return
if __name__=='__main__':
main()
सूचियां उत्परिवर्तनीय हैं, आप उनके तत्वों को संशोधित कर सकते हैं और यह संदर्भ के साथ सभी को प्रभावित करता है। जब आप इसे फिर से असाइन करते हैं, तो आप एक नया संदर्भ बना रहे हैं। – byxor
यह काफी अजीब बात है कि मैं कोड के अन्य टुकड़ों को "हर कोई" के रूप में कैसे संदर्भित करता हूं। हो सकता है कि मानवीय कोड इसे बेहतर समझने का मेरा तरीका है। – byxor