سلام امید وارم حالتون خوب باشه،تو این نوشته قراره یک امکان جالب داخل پایتون برسی کنیم با عنوان contex manager ها ، راستشو بخواید من نتونستم معادل فارسی خوبی برای این کلمه پیدا کنم. بنظرم بیشتر باعث مبهم شدن موضوع میشد(مدیر زمینه /:) ولی بهر حال با وجود اسم عجبیش ، چیز اشنا و شناخته شده ای هست.به کد زیر توجه کنید ، حتما یا سابقه استفاده از with برای باز کردن یک فایل داشتید ، یا اونو جایی دیدید، اگر هم ندیدید که الان بهش دقت کنید :)
با استفاده از contex manager ها ما میتونیم که منابع خودمون مدیریت کنیم. مثل فضای ذخیره سازی ، دیتابیس ، IO ها و.... خب مثلا داخل مثال بالا ما خیالمون راحته که فایلی که باز کردیم خودش با بسته شدن
بلاک with بسته میشه. و دیگه نگران اون نیستیم که ممکنه برنامه مون فایل باز شده ای داشته باشه.
اگر از with برای باز کردن فایل و نوشتن چیزی داخل اون استفاده میکنیم ، معادل اینه که از این کد برای باز کردن و نوشتن در فایل استفاده کرده باشیم.
خب حالا از چه object هایی میتونیم در ساختار with استفاده کنیم.و ایا خودمون میتونیم یکی از این object ها رو درست کنیم. بیاید یک مثال ببینیم:
برای اینکه یک شی داخل پایتون بتونه از در ساختار with مورد استفاده قرار بگیره باید با توجه به ساختار زیر پیاده سازی شده باشه.
بیاید استفاده از این ساختار رو داخل یک مثال تمرین کنیم.
و با استفاده از این object داریم:
و زمانی که کد رو در کامند لاین اجرا کنیم به نتایج زیر میرسیم:
یک استفاده خلاقانه از with .
خب حالا میخوایم که با استفاده از with زمان اجرای کدمون رو اندازه گیری کنیم.
خب ما اینجا یک contex manager تعریف کردیم که با استفاده از اون زمان اجرای کدی که داخل بلوک with قرار میگیره اندازه گیری میکنیم. فلسفه کد به این صورته که زمانی که ما داخل بلاک with یک شی از نوع Timer تعریف میکنیم و وارد بلاک میشیم. تابع __enter__ فراخوانی میشه و زمان شروع اجرا رو ذخیره میکنه. همچنین زمانی که بلاک خارج می شویم. تابع exit فراخوانی میشود. و اختلاف زمان فعلی و زمان گذشته در خروجی چاپ میشود.
خب امیدوارم این اموزش براتون مفید بوده باشه.
مثال های این قسمت از کتابpython tricks انتخاب شده بود.