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

4 سال پیش
امتیاز دهید post

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

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

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

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

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

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

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

 

خروجی

 

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

 

خروجی

 

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

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

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

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

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

 

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

 

خروجی

 

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

 

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

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

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

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

 

 

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

 

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

 

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

 

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

منبع.

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

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

دیدگاه شما

بدون دیدگاه