دامنه متغیرها در پایتون

دامنه محلی (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

پایتون متغیرها را به این ترتیب جستجو می‌کند:

  1. Local — محلی (داخل تابع)
  2. Enclosing — تابع بیرونی (nested)
  3. Global — سراسری
  4. 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سطح برنامه
nonlocalnonlocalتابع بیرونی

این مبحث بخشی از دوره آموزش کامل پایتون است.

ابزارهای مرتبط