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

4 سال پیش

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، با نام و دامنه در برنامه نویسی پایتون (Namespace and Scope) آشنا خواهید شد.

نام در پایتون چیست؟

اگر تا به حال “ذن پایتون” را خوانده اید، آخرین خط آن بیان می کند، فضاهای نام یکی از ایده های عالی است – بیایید کارهای بیشتری را با آن ها انجام دهیم!  این فضاهای اسرارآمیز کدامند؟ بگذارید ابتدا ببینیم نام در پایتون چیست.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون

نام (Name) (شناساگر نیز نامیده می شود) به سادگی نامی است که به اشیا داده می شود. همه چیز در پایتون یک شی است. Name راهی برای دستیابی به شی اصلی است.

به عنوان مثال، هنگامی که تخصیص a = 2 را انجام می دهیم، ۲ یک شی ذخیره شده در حافظه است و a نامی است که آن را با آن مرتبط می کنیم. ما می توانیم آدرس (در RAM) برخی از اشیا را از طریق شناسه تابع توکار ()id دریافت کنیم. بیایید نحوه استفاده از آن را بررسی کنیم.

# Note: You may get different values for the id

a = 2
print('id(2) =', id(2))

print('id(a) =', id(a))

 

خروجی

id(2) = 9302208
id(a) = 9302208

 

در اینجا، هر دو به یک شی ۲ اشاره می کنند، بنابراین آنها id () مشابهی دارند. بیایید همه چیز را کمی جالب تر کنیم.

# Note: You may get different values for the id

a = 2
print('id(a) =', id(a))

a = a+1
print('id(a) =', id(a))

print('id(3) =', id(3))

b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))

 

خروجی

id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208

 

در توالی مراحل فوق چه اتفاقی می افتد؟ بیایید از یک نمودار برای توضیح این استفاده کنیم:

در ابتدا ، یک شی ۲ ایجاد می شود و نام a با آن در ارتباط است ، وقتی که ما a = a + 1 را انجام می دهیم ، یک جسم جدید ۳ ایجاد می شود و اکنون a با این جسم مرتبط می شود.

توجه داشته باشید که (id(a و (id(3 مقادیر یکسانی دارند.

بعلاوه ، وقتی b = 2 اجرا می شود ، نام جدید b با شی قبلی ۲ مرتبط می شود.

این کار بسیار کارآمد است زیرا پایتون نیازی به ایجاد یک شی تکراری جدید ندارد. این ماهیت پویا در اتصال به نام ، پایتون را قدرتمند می کند. یک نام می تواند به هر نوع شی ای اشاره داشته باشد.

>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]

 

همه اینها معتبر هستند و a به سه نوع مختلف از اشیا in در موارد مختلف اشاره دارد. توابع نیز اشیا هستند ، بنابراین یک نام می تواند به آنها نیز اشاره کند.

def printHello():
    print("Hello")


a = printHello

a()

 

خروجی

Hello

 

همین نام a می تواند به یک تابع اشاره داشته باشد و ما می توانیم با استفاده از این نام تابع را فراخوانی کنیم.

 

فضای نام در پایتون چیست؟

حال که فهمیدیم نام چیست، می توانیم به مفهوم فضاهای نام برویم.

به زبان ساده، فضای نام مجموعه ای از نام هاست.

در پایتون، می توانید یک فضای نام را به عنوان نگاشت هر نامی که برای اشیا مربوطه تعریف کرده اید، تصور کنید.

فضاهای مختلف نامی می توانند در یک زمان مشخص وجود داشته باشند اما کاملاً جدا هستند.

وقتی ما مفسر Python را شروع می کنیم یک فضای نامی حاوی همه نام های داخلی ایجاد می شود و تا زمانی که مفسر اجرا شود وجود دارد.

این دلیل آن است که توابع توکار مانند ()id و ()print و غیره همیشه از هر قسمت از برنامه در دسترس ما هستند. هر ماژول فضای نام  خود را ایجاد می کند.

این فضاهای مختلف نام جدا شده (ایزوله) است. از این رو، نام مشابهی که ممکن است در ماژول های مختلف وجود داشته باشد، با هم برخورد نمی کنند.

ماژول ها می توانند توابع و کلاسهای مختلفی داشته باشند. یک فضای نام محلی وقتی با فراخوانی یک تابع ایجاد می شود که همه نام ها را در آن تعریف کرده است. به طور مشابه در مورد کلاس نیز وجود دارد. نمودار زیر ممکن است به روشن شدن این مفهوم کمک کند.

 

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

اگرچه فضای نامهای مختلف و متنوعی تعریف شده است، اما ممکن است نتوانیم از همه قسمتهای برنامه به همه آنها دسترسی داشته باشیم. مفهوم دامنه وارد عمل می شود.

یک دامنه بخشی از برنامه است که از آنجا می توان بدون هیچ پیشوندی مستقیماً به یک فضای نام دسترسی داشت.

در هر لحظه حداقل سه دامنه تو در تو وجود دارد.

  1. دامنه تابع فعلی که دارای نام های محلی است
  2. دامنه ماژولی که دارای نام های سراسری است
  3. حداکثر دامنه ای که دارای نام های داخلی است

هنگامی که ارجاعی در داخل یک تابع ایجاد می شود، نام در فضای نام محلی سپس در فضای نام سراسری یا جهانی و در نهایت در فضای تو در تو جستجو می شود.

اگر در داخل یک تابع درون دیگر تابعی وجود داشته باشد، یک دامنه جدید درون دامنه محلی تو در تو قرار می گیرد.

 

نمونه ای از دامنه و فضای نام در پایتون

def outer_function():
    b = 20
    def inner_func():
        c = 30

a = 10

 

در اینجا، متغیر a در فضای نام سراسری است. متغیر b در فضای نام محلی local_function () و c در فضای نام محلی تو در تو داخلی ()inner_function است.

وقتی در برنامه () inner_function هستیم، c برای ما محلی است ، b غیر محلی و a سراسری است. می ‌توان مقادیر را همانطوری خواند که به c تخصیص پیدا می ‌کنند اما فقط می توانیم b و a را از () inner_function بخوانیم.

اگر بخواهیم به عنوان یک مقدار به b تخصیص دهیم، یک متغیر جدید b در فضای نام محلی ایجاد می شود که متفاوت از b غیر محلی است. وقتی مقداری را به a تختصاص می دهیم، همین اتفاق می افتد.

اگر a را به عنوان متغیر سراسری تعریف شود، همه ارجاع‌ ها و تخصیص ‌ها به a سراسری می ‌روند.  به همین ترتیب، اگر بخواهیم متغیر b را باز انقیاد کند، باید آن را به صورت غیر محلی اعلام کرد. مثال زیر این موضوع را بیشتر روشن می کند.

 

def outer_function():
    a = 20

    def inner_function():
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

 

همانطور که مشاهده می کنید، خروجی این برنامه به صورت زیر می باشد

a = 30
a = 20
a = 10

 

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

def outer_function():
    global a
    a = 20

    def inner_function():
        global a
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

 

خروجی این برنامه به صورت زیر می باشد

a = 30
a = 30
a = 30

 

در اینجا، همه ارجاع ‌ها و تخصیص ‌ها مربوط به a سراسری است که به دلیل استفاده از کلید واژه global است.

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه