नेमस्पेस पायथन में स्कोप को लागू करने का एक तरीका है। पायथन में प्रत्येक पैकेज, मॉड्यूल, क्लास, फ़ंक्शन और मेथड फ़ंक्शन का अपना एक "नेमस्पेस" होता है जिसमें वेरिएबल नामों को हल (resolve) किया जाता है। जब कोई फ़ंक्शन, मॉड्यूल या पैकेज मूल्यांकन किया जाता है (यानी निष्पादन शुरू होता है), तो एक नेमस्पेस बनाया जाता है। इसे "मूल्यांकन संदर्भ" (evaluation context) के रूप में सोचें। जब फ़ंक्शन आदि का निष्पादन समाप्त होता है, तो नेमस्पेस हटा दिया जाता है। वेरिएबल हटा दिए जाते हैं। इसके अलावा एक ग्लोबल नेमस्पेस होता है जिसका उपयोग तब किया जाता है जब नाम लोकल नेमस्पेस में नहीं होता।
वेरिएबल निर्माण
वेरिएबल आमतौर पर केवल लोकल नेमस्पेस में बनाए जाते हैं। global और nonlocal स्टेटमेंट लोकल नेमस्पेस के अलावा अन्य नेमस्पेस में वेरिएबल बना सकते हैं।
स्कोप रिजॉल्यूशन: LEGB नियम
स्कोप रिजॉल्यूशन तब आवश्यक होता है जब यह निर्धारित करने के लिए वेरिएबल का उपयोग किया जाता है कि उसका मान कहां से आना चाहिए। पायथन में स्कोप रिजॉल्यूशन LEGB नियम का पालन करता है:
| अक्षर | स्कोप | विवरण |
|---|---|---|
| L | Local | किसी फ़ंक्शन (या लैम्ब्डा) के भीतर किसी भी तरह से असाइन किए गए नाम, और उस फ़ंक्शन में ग्लोबल घोषित नहीं |
| E | Enclosing-function locals | किसी भी और सभी स्थैतिक रूप से एनक्लोजिंग फ़ंक्शन (या लैम्ब्डा) के लोकल स्कोप में नाम, आंतरिक से बाहरी तक |
| G | Global (module) | मॉड्यूल फ़ाइल के शीर्ष स्तर पर असाइन किए गए नाम, या फ़ाइल के भीतर def में ग्लोबल स्टेटमेंट निष्पादित करके |
| B | Built-in (Python) | बिल्ट-इन नेम मॉड्यूल में पूर्व-असाइन किए गए नाम: open, range, SyntaxError, आदि |
उदाहरण
x = 'global' # G - ग्लोबल
def outer():
x = 'enclosing' # E - एनक्लोजिंग
def inner():
x = 'local' # L - लोकल
print(x) # 'local' प्रिंट करता है
inner()
print(x) # 'enclosing' प्रिंट करता है
outer()
print(x) # 'global' प्रिंट करता है
global और nonlocal
count = 0
def increment():
global count
count += 1
def outer():
x = 10
def inner():
nonlocal x
x = 20
inner()
print(x) # 20 प्रिंट करता है