मैं सजावट के बारे में यह article पढ़ रहा हूं।नेस्टेड फ़ंक्शंस में पायथन वैरिएबल स्कोप
चरण 8 पर, वहाँ एक समारोह के रूप में परिभाषित किया गया है:
def outer():
x = 1
def inner():
print x # 1
return inner
और यदि हम इसे द्वारा चलाए: यह एक्स प्रिंट नहीं करता
>>> foo = outer()
>>> foo.func_closure # doctest: +ELLIPSIS
। स्पष्टीकरण के अनुसार:
सब कुछ पाइथन के स्कॉइंग नियमों के अनुसार काम करता है - एक्स एक स्थानीय हमारे कार्य बाहरी में चर है। जब आंतरिक प्रिंट्स x # बिंदु पर पाइथन स्थानीय चर के लिए आंतरिक रूप से दिखता है और यह नहीं ढूंढता है तो यह को उस क्षेत्र को संलग्न करता है जो कार्य बाहरी है, इसे वहां ढूंढ रहा है।
लेकिन परिवर्तनीय जीवनकाल के दृष्टिकोण से चीजों के बारे में क्या? हमारे परिवर्तनीय x फ़ंक्शन बाहरी के लिए स्थानीय है जिसका अर्थ है कि यह केवल मौजूद है जबकि फ़ंक्शन बाहरी चल रहा है। हम बाहरी की वापसी के बाद तक आंतरिक कॉल करने में सक्षम नहीं हैं, इसलिए हमारे मॉडल के मुताबिक पाइथन काम करता है, जब तक हम आंतरिक रूप से कॉल नहीं करते हैं और शायद किसी प्रकार की रनटाइम त्रुटि होनी चाहिए, तब तक एक्स मौजूद नहीं होना चाहिए।
हालांकि, मैं वास्तव में समझ नहीं पा रहा हूं कि दूसरा अनुच्छेद क्या है।
मैं समझता हूं कि आंतरिक() को एक्स का मान मिलता है लेकिन यह एक्स को क्यों प्रिंट नहीं करता है?
धन्यवाद
अद्यतन:
सभी प्रश्नों के उत्तर के लिए धन्यवाद। अब मैं कारण समझता हूं। यही वजह है कि आंतरिक() एक्स के रूप में यह सभी
ओपी भी पूछ रहा है क्यों 'x' अभी भी – jamylak
@jamylak मौजूद है: यह है कि क्या वह है या नहीं है मेरे लिए स्पष्ट नहीं है। वह कहता है कि वह उद्धृत अनुच्छेद को समझ में नहीं आता है, लेकिन यह भी कहता है कि वह समझता है कि 'आंतरिक' को 'x' तक कैसे पहुंच है। – BrenBarn
किसी भी तरह से आपने इसे अभी स्पष्ट कर दिया है ''nonlocal'' कथन के लिए – jamylak