دامنه چیست؟

دامنه ها یک محدوده هستند که در آنها میتوان ناحیه دسترسی به متغیر هارا تعیین کرد.

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

دسترسی به هر متغیر فقط در همان محدوده صورت میگیرد.

محدوده محلی(Local Scope)

یکی از محدوده های کوچک است مانند بلوک یک تابع.

متغیری که داخل یک تابع تعریف شود یعنی در ناحیه محلی قرار دارد و برای دسترسی به آن متغیر باید در داخل همان تابع تغییرات را اعمال کنیم.

def func():
    x = "alireza"
    print(x)
func()

 

نکته: در صورتی که بیرون از محدوده محلی، متغیر x را پرینت کنیم با خطای وجود نداشتن متغیر مواجه میشوید.

 

def func():
    x = "alireza"
print(x)

توابع تو در تو

در توابع تو در تو نمیتوان متغیری که در تابع اول ایجاد شده را به طور مستقیم در تابع دوم دسترسی پیدا کرد.

def myfunc():
    x = 80
    def func():
        print(x)
    func()
myfunc()

محدوده جهانی(Global Scope)

متغیر هایی که در بدنه اصلی کد های پایتون هستند، متغیر های جهانی اند و هرجایی قابل استفاده اند.

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

x = 90
def func():
    print(x)
func()
print(x)

 

نکته: در محدوده محلی میتوان به محدوده جهانی دسترسی داشت ولی در محدوده جهانی نمیتوان به محدوده محلی دسترسی داشت.

 

نام متغیر ها

میدانید که به طور کلی در پایتون نمیتوان دو متغیر را با یک نام ایجاد کرد. 

ولی اگر دو متغیر در محدوده های متفاوت باشند مشکلی ندارد و پایتون این دو متغیر را متفاوت میبیند.

x = 70
def func():
    x = 90
    print(x)
func()
print(x)

 

نکته: پیشنهاد میکنیم که معمولا از نام یک متغیر چندین بار استفاده نکنید زیرا بعد ها در خواندن کد یا دیباگ کردن ممکن است دچار اشتباه شوید.

 

کلمه کلیدی global

اگر در محدوده محلی هستید ولی نیاز به ایجاد یک متغیر جهانی دارید، میتوانید از کلمه کلیدی global استفاده کنید.

def func():
    global x
    x = 100
func()
print(x)

کلمه کلیدی nonlocal

این کلمه کلیدی را میتوان در توابع تودرتو استفاده کرد و کاربرد آن این است که در تابع داخلی میتوانید به متغیر تعریف شده در تابع خارجی دسترسی پیدا کنید.

def func1():
    x = 2
    def func2():
        nonlocal x
        x += 1
    func2()
    return x

print(func1())

خلاصه درس

  • دامنه ها محدوده های متفاوت در ایجاد متغیر هستند.
  • محدوده های محلی مانند تابع ها و حلقه ها و... هستند.
  • محدوده جهانی بدنه اصلی کد است.
  • از همه جا میتوان به متغیر های محدوده جهانی دسترسی داست.
  • از طریق کلمه کلیدی global میتوان در محدوده محلی متغیر جهانی ایجاد کرد.

توسعه دهندگان
علیرضا چمنی