मैं अजगर के डांटने के नियमों के बारे में नहीं पूछ रहा हूं; मैं आमतौर पर समझता हूं कि लूप के लिए पायथन में स्कूपिंग कैसे काम करता है। मेरा प्रश्न यह है कि इस तरह से डिजाइन निर्णय क्यों किए गए थे। उदाहरण के लिए (कोई सज़ा का इरादा नहीं):
for foo in xrange(10):
bar = 2
print(foo, bar)
ऊपर (9,2) प्रिंट होगा।
यह मुझे अजीब लगता है: 'फू' वास्तव में सिर्फ लूप को नियंत्रित करता है, और लूप के अंदर 'बार' को परिभाषित किया गया था। मैं समझ सकता हूं कि लूप के बाहर 'बार' का पहुंचना क्यों जरूरी हो सकता है (अन्यथा, लूप के लिए बहुत सीमित कार्यक्षमता होगी)। मुझे समझ में नहीं आता है कि लूप के बाहर निकलने के बाद कंट्रोल वैरिएबल के दायरे में रहना क्यों जरूरी है। मेरे अनुभव में, यह केवल वैश्विक नामस्थान को बंद कर देता है और उन त्रुटियों को ट्रैक करना कठिन बनाता है जिन्हें अन्य भाषाओं में व्याख्याताओं द्वारा पकड़ा जाएगा।
for
लूप आपके वैश्विक नामस्थान को अव्यवस्थित करे, तो इसे किसी फ़ंक्शन में लपेटें। क्लोजर गेलरी!