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

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

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

  • دامنه محلی (Local Scope)
  • دامنه سراسری یا عمومی (Global Scope)

محدوده محلی(Local Scope) در پایتون

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

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

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

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

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

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

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

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

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

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

نام متغیر ها در دامنه های مختلف پایتون

در پایتون نمی توان دو متغیر را با یک نام یکسان در یک محدوده ایجاد کرد. 

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

برای مثال می توان متغیری به نام x ایجاد کرد اما یکی در دامنه سراسری و دیگری در دامنه محلی.

x = 70 #این متغیر سراسری است
def func():
    x = 90 # این متغیر محلی است

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

کلمه کلیدی global در پایتون

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

def func():
    global x
    x = 100

دامنه توابع تو در تو در پایتون

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

برای مثال متغیر x که در تابع myfunc تعریف شده را در تابع داخلی func نمی توان پرینت کرد.

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

کلمه کلیدی nonlocal در پایتون

کلمه کلیدی nonlocal در صورتی استفاده می شود که قصد داریم در یک محدوده محلی، از یک محدوده محلی دیگر متغیری را استفاده کنیم.

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

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

خلاصه درس

در این درس با انواع دامنه ها در پایتون آشنا شدید.

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