TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2218 433
🔆 ترفند پیشرفته contextlib و تمیزکاری خودکار

🔹 چطوری با ۶ خط کد، سرعت اجرای توابع رو بدون تغییر دادنشون بسنجیم؟


🔹 به‌جای اینکه هر بار قبل و بعد از یک بلاک کد time.time() بنویسید یا برای باز و بسته کردن کانکشن‌ها کلی try/finally کثیف بزنید، با ماژول استاندارد contextlib می‌تونید کانتکست منیجر اختصاصی خودتون رو مثل آب خوردن با دستور with پیاده کنید!

🔹 نمونه کد عملی:

import time
from contextlib import contextmanager

@contextmanager
def execution_timer(task_name: str):
start = time.perf_counter()
print(f"⏳ شروع عملیات: {task_name}...")
try:
yield # کدهای داخل بلوک with اینجا اجرا میشن
finally:
elapsed = time.perf_counter() - start
print(f"✅ پایان عملیات {task_name} | زمان اجرا: {elapsed:.4f} ثانیه")

# استفاده خیلی شیک و خوانا در هر کجای پروژه:
with execution_timer("پردازش دیتاهای سنگین"):
total = sum(i ** 2 for i in range(2_000_000))

🔹 نتیجه: حتی اگه خطایی وسط کد بیفته، بخش finally اجرا میشه و هیچ ریسورسی (مثل فایل، قفل، یا کانکشن) باز نمیمونه.

🐍 @python_rd
More from @python_rd
  1. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  2. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  3. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
  4. Oct 11, 2026🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib) 🔹 ساخت Context Managerها م…
  5. Oct 10, 2026🔆 چرا برای داده‌های حجیم نباید از return استفاده کنی؟ 🔹 وقتی یک تابع لیست بزرگی از داده‌…
  6. Oct 10, 2026🔆 خروجی این تکه کد چیه؟ def add_item(item, lst=[]): lst.append(item) return lst print(add…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →