ভেরিয়েবল হলো নাম (আইডেন্টিফায়ার) যা অবজেক্টে ম্যাপ করে। একটি নেমস্পেস হলো ভেরিয়েবল নাম (কী) এবং তাদের সংশ্লিষ্ট অবজেক্ট (ভ্যালু) এর একটি ডিকশনারি।
এক পাইথন স্টেটমেন্ট লোকাল নেমস্পেস এবং গ্লোবাল নেমস্পেস-এ ভেরিয়েবল অ্যাক্সেস করতে পারে। যদি লোকাল এবং গ্লোবাল ভেরিয়েবলের একই নাম থাকে, তবে লোকাল ভেরিয়েবল গ্লোবালকে শেডো করে।
প্রতিটি ফাংশনের নিজস্ব লোকাল নেমস্পেস থাকে। ক্লাস মেথডও সাধারণ ফাংশনের মতো স্কোপিং নিয়ম মেনে চলে।
পাইথন ভেরিয়েবল লোকাল কিনা গ্লোবাল সেটা অনুমান করে। এটি অনুমান করে যে ফাংশনে যে ভেরিয়েবলে মান অ্যাসাইন করা হয়েছে সেটি লোকাল।
তাই ফাংশনের ভিতরে একটি গ্লোবাল ভেরিয়েবলে মান অ্যাসাইন করতে হলে আগে 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