TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.11K subscribers
Post #2161 574
🔆 یکی از قدرتمندترین و در عین حال کم‌کاربردترین ابزارهای پایتون، functools.lru_cache هست.

🔹این دکوراتور مثل یک سیستم کشینگ (Caching) درون‌برنامه‌ای عمل می‌کنه و نتایج توابع سنگین یا محاسباتی رو ذخیره می‌کنه تا توی اجراهای بعدی با همون ورودی، بدون محاسبات مجدد و در صدم‌ثانیه نتیجه رو برگردونه!


🔹 بدون کشینگ (کند و اجرای مجدد محاسبات):
import time

def get_user_data(user_id):
# فرض کنید این تابع به دیتابیس وصل میشه و ۲ ثانیه طول می‌کشه
time.sleep(2)
return f"User Data for ID: {user_id}"

# هر بار فراخوانی ۲ ثانیه زمان می‌بره
print(get_user_data(101)) # 2 seconds
print(get_user_data(101)) # 2 seconds (دوباره همان زمان!)

🔹 با lru_cache (بهینه‌سازی فوق‌العاده با اضافه کردن ۱ خط):
from functools import lru_cache
import time

@lru_cache(maxsize=128) # حداکثر ۱۲۸ نتیجه اخیر را کش می‌کند
def get_user_data(user_id):
time.sleep(2)
return f"User Data for ID: {user_id}"

print(get_user_data(101)) # اجرا میشه (۲ ثانیه)
print(get_user_data(101)) # آنی و بدون معطلی برمی‌گرده! (0.00 seconds)

🔹 نکات کلیدی:

. پارامتر maxsize: ظرفیت کش را مشخص می‌کند (None یعنی بدون محدودیت).

. شرط مهم: آرگومان‌های تابعی که دکوراتور @lru_cache می‌گیرد باید Hashable باشند (مثل string, int, tuple) نه لیست یا دیکشنری.

. کاربرد: فراخوانی‌های مکرر API، محاسبات سنگین ریاضی، یا کوئری‌های ثابت دیتابیس.


🔹 بونس: اگر خواستید کش را به صورت دستی خالی کنید:
get_user_data.cache_clear()

🐍 @python_rd
  • ❤ 1
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 →