Python में Namespace
Namespace Scope को Implement करने का एक तरीका है। Python में, प्रत्येक Package, Module, Class, Function और Method Function का अपना एक "Namespace" होता है जिसमें Variable Names Resolve होते हैं। जब कोई Function, Module या Package Evaluate होता है (यानी Execution शुरू होता है), तो एक Namespace Create होता है। इसे "Evaluation Context" के रूप में सोचें। जब कोई Function, आदि, Execution समाप्त करता है, तो Namespace Drop हो जाता है। Variables Drop हो जाते हैं। साथ ही एक Global Namespace होता है जिसका उपयोग तब किया जाता है जब Name Local Namespace में नहीं होता।
प्रत्येक Variable Name को पहले Local Namespace (Function का Body, Module, आदि) में Check किया जाता है, और फिर Global Namespace में Check किया जाता है।
Variables आमतौर पर केवल Local Namespace में Create किए जाते हैं। global और nonlocal Statements Variables को Local Namespace के अलावा अन्य Namespaces में Create कर सकते हैं।
Namespace Types:
- Built-in Namespace: Python Startup पर Create होता है, Built-in Functions/Exceptions रखता है (
print,len,Exception, आदि) - Global Namespace: Module Level पर Create होता है, Module के Lifetime तक रहता है
- Local Namespace: Function Call पर Create होता है, Function Return होने पर Destroy हो जाता है
- Enclosing Namespace: Nested Functions के लिए
Namespace Access:
# Built-in Namespace Access
import builtins
print(dir(builtins))
# Global Namespace Access
print(globals())
# Local Namespace Access
def func():
local_var = 10
print(locals())
func()
Namespace Dictionaries:
Python में Namespaces को Internally Dictionaries के रूप में Implement किया जाता है जहां Keys Variable Names होते हैं और Values Objects होते हैं।
Practical Example:
# Global Namespace
counter = 0
def increment():
# Local Namespace - यह नया Local Variable बनाता है!
counter = 1
print(f"Local: {counter}")
def increment_global():
global counter # Global Namespace का Reference
counter += 1
print(f"Global: {counter}")
increment() # Local: 1 (Global Unchanged)
increment_global() # Global: 1
increment_global() # Global: 2