पायथन में हम वेरिएबल्स, फ़ंक्शन्स, लाइब्रेरीज़ और मॉड्यूल्स आदि से निपटते हैं। इस बात की संभावना है कि जिस वेरिएबल नाम का आप उपयोग करने जा रहे हैं वह पहले से ही किसी अन्य वेरिएबल के नाम के रूप में या किसी अन्य फ़ंक्शन या मेथड के नाम के रूप में मौजूद है। ऐसे परिदृश्य में, हमें यह सीखने की आवश्यकता है कि पायथन प्रोग्राम द्वारा इन सभी नामों को कैसे प्रबंधित किया जाता है। यही नेमस्पेस (namespace) की अवधारणा है।
नेमस्पेस की तीन श्रेणियां
- लोकल नेमस्पेस (Local Namespace): प्रोग्राम द्वारा घोषित सभी फ़ंक्शन्स और वेरिएबल्स के नाम इस नेमस्पेस में रखे जाते हैं। यह नेमस्पेस तब तक मौजूद रहता है जब तक प्रोग्राम चलता है।
- ग्लोबल नेमस्पेस (Global Namespace): यह नेमस्पेस पायथन प्रोग्राम में उपयोग किए जा रहे मॉड्यूल्स में शामिल सभी फ़ंक्शन्स और अन्य वेरिएबल्स के नाम रखता है। इसमें लोकल नेमस्पेस का हिस्सा शामिल होता है।
- बिल्ट-इन नेमस्पेस (Built-in Namespace): यह नेमस्पेस का उच्चतम स्तर है जो पायथन इंटरप्रेटर के साथ लोड किए गए प्रोग्रामिंग वातावरण के हिस्से के रूप में उपलब्ध डिफ़ॉल्ट नामों के साथ उपलब्ध है। इसमें ग्लोबल नेमस्पेस शामिल होता है जो बदले में लोकल नेमस्पेस को शामिल करता है।

पायथन में स्कोप (Scope)
नेमस्पेस का एक जीवनकाल होता है जब यह उपलब्ध होता है। इसे स्कोप भी कहा जाता है। साथ ही स्कोप उस कोडिंग क्षेत्र पर निर्भर करेगा जहां वेरिएबल या ऑब्जेक्ट स्थित है। आप नीचे दिए गए प्रोग्राम में देख सकते हैं कि आंतरिक लूप में घोषित वेरिएबल्स बाहरी लूप के लिए उपलब्ध हैं लेकिन इसके विपरीत नहीं। साथ ही कृपया ध्यान दें कि बाहरी फ़ंक्शन का नाम भी ग्लोबल वेरिएबल का हिस्सा कैसे बन जाता है।
उदाहरण
prog_var = 'Hello'
def outer_func():
outer_var = 'x'
def inner_func():
inner_var = 'y'
print(dir(), ' Local Variable in Inner function')
inner_func()
print(dir(), 'Local variables in outer function')
outer_func()
print(dir(), 'Global variables')
उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:
आउटपुट
['inner_var'] Local Variable in Inner function ['inner_func', 'outer_var'] Local variables in outer function ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'outer_func', 'prog_var'] Global variables
LEGB नियम:
पायथन नामों को निम्न क्रम में खोजता है:
- Local - वर्तमान फ़ंक्शन/लोकल स्कोप
- Enclosing - एनक्लोजिंग फ़ंक्शन का स्कोप (नेस्टेड फ़ंक्शन्स)
- Global - मॉड्यूल स्तर
- Built-in - पायथन बिल्ट-इन्स (
len,print, आदि)
global और nonlocal कीवर्ड:
x = 10 # ग्लोबल
def outer():
x = 20 # एनक्लोजिंग
def inner():
nonlocal x # एनक्लोजिंग x को मॉडिफाई करें
x = 30
inner()
print(x) # 30
outer()
print(x) # 10 (ग्लोबल अपरिवर्तित)