دامنه متغیرها در پایتون
دامنه محلی (local)، سراسری (global)، nonlocal و کلمه کلیدی global
دامنه (Scope) چیست؟
دامنه یعنی بخشی از کد که یک متغیر در آن قابل دسترسی است. پایتون سه نوع دامنه دارد:
۱. دامنه محلی (Local)
متغیرهای تعریفشده داخل تابع، فقط در همان تابع قابل دسترسی هستند:
def my_function():
x = 10 # محلی
print(x)
my_function() # 10
# print(x) # ❌ خطا! x اینجا قابل دسترسی نیست
۲. دامنه سراسری (Global)
متغیرهای تعریفشده در سطح اصلی برنامه:
x = 100 # سراسری
def my_function():
print(x) # ✅ دسترسی به سراسری
my_function() # 100
print(x) # 100
تغییر متغیر سراسری — global
برای تغییر متغیر سراسری داخل تابع، از global استفاده کنید:
counter = 0
def increment():
global counter # اعلام استفاده از متغیر سراسری
counter += 1
increment()
increment()
print(counter) # 2
بدون
global، پایتون یک متغیر محلی جدید میسازد، نه اینکه سراسری را تغییر دهد!۳. دامنه nonlocal
برای متغیرهای در تابع تو در تو (nested):
def outer():
x = 10
def inner():
nonlocal x # متغیر تابع بیرونی
x += 5
inner()
print(x) # 15
outer()
قاعده LEGB
پایتون متغیرها را به این ترتیب جستجو میکند:
- Local — محلی (داخل تابع)
- Enclosing — تابع بیرونی (nested)
- Global — سراسری
- Built-in — توابع داخلی پایتون
مثال
x = "سراسری"
def outer():
x = "بیرونی"
def inner():
x = "محلی"
print(x) # محلی
inner()
print(x) # بیرونی
outer()
print(x) # سراسری
globals() و locals()
x = 10
def func():
y = 20
print("محلی:", locals())
print("سراسری:", "x" in globals())
func()
خلاصه
| دامنه | کلمه کلیدی | توضیح |
|---|---|---|
| محلی | — | داخل تابع |
| سراسری | global | سطح برنامه |
| nonlocal | nonlocal | تابع بیرونی |
این مبحث بخشی از دوره آموزش کامل پایتون است.