वेरिएबल्स नाम (आइडेंटिफायर्स) हैं जो ऑब्जेक्ट्स से मैप होते हैं। एक नेमस्पेस वेरिएबल नामों (कीज़) और उनके संबंधित ऑब्जेक्ट्स (मानों) का डिक्शनरी है।
एक पायथन स्टेटमेंट लोकल नेमस्पेस और ग्लोबल नेमस्पेस में वेरिएबल्स को एक्सेस कर सकता है। यदि किसी लोकल और ग्लोबल वेरिएबल का नाम समान है, तो लोकल वेरिएबल ग्लोबल वेरिएबल को शैडो करता है।
प्रत्येक फ़ंक्शन का अपना लोकल नेमस्पेस होता है। क्लास मेथड्स सामान्य फ़ंक्शन्स के समान ही स्कोपिंग नियम का पालन करते हैं।
पायथन इस बात पर शिक्षित अनुमान लगाता है कि वेरिएबल्स लोकल हैं या ग्लोबल। यह मानता है कि किसी फ़ंक्शन में एक मान असाइन किया गया कोई भी वेरिएबल लोकल है।
इसलिए, किसी फ़ंक्शन के भीतर एक ग्लोबल वेरिएबल को मान असाइन करने के लिए, आपको पहले global स्टेटमेंट का उपयोग करना होगा।
स्टेटमेंट global VarName पायथन को बताता है कि VarName एक ग्लोबल वेरिएबल है। पायथन उस वेरिएबल के लिए लोकल नेमस्पेस में खोज करना बंद कर देता है।
उदाहरण के लिए, हम ग्लोबल नेमस्पेस में एक वेरिएबल Money परिभाषित करते हैं। फ़ंक्शन Money के भीतर, हम Money को एक मान असाइन करते हैं, इसलिए पायथन Money को लोकल वेरिएबल मानता है। हालांकि, हमने इसे सेट करने से पहले लोकल वेरिएबल Money के मान को एक्सेस किया, इसलिए UnboundLocalError परिणाम है। global स्टेटमेंट को अनकमेंट करने से समस्या ठीक हो जाती है।
#!/usr/bin/python
Money = 2000
def AddMoney():
# निम्न लाइन को अनकमेंट करके कोड ठीक करें:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money