eitaa logo
آموزش پایتون
62 دنبال‌کننده
244 عکس
106 ویدیو
52 فایل
ارتباط: https://eitaa.com/joinchat/956171922Cb501d5a32f لینک همین کانال: @LearnPythonIcy لینک کانال تلگرام: https://t.me/learnpythonicy
مشاهده در ایتا
دانلود
✔️ ماژول functools یکی از ماژول‌های استاندارد پایتون است که ابزارهایی برای کار با توابع (functions) و callableها فراهم می‌کند. این ماژول بیشتر برای برنامه‌نویسی تابعی (functional programming) و کَش کردن، مرتب‌سازی، و ترکیب توابع استفاده می‌شود. --- 📦 کاربردهای اصلی functools در ادامه مهم‌ترین ابزارها و دکوراتورهای این ماژول را توضیح می‌دهم: --- 1. 🔁 @lru_cache و @cache برای کَش کردن نتایج توابع: python from functools import lru_cache @lru_cache(maxsize=128) def slow_function(x): print("Running...") return x * 2 @lru_cache(maxsize=None) = بدون محدودیت → مشابه @cache (در پایتون 3.9+) مناسب برای توابعی با محاسبه‌ی سنگین که بارها با ورودی‌های تکراری فراخوانی می‌شوند. --- 2. 🪝 @wraps برای حفظ متادیتا (مثل name, doc) هنگام نوشتن دکوراتورهای سفارشی: python from functools import wraps def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): print("Before call") return func(*args, **kwargs) return wrapper --- 3. 🧩 partial برای ساختن نسخه‌ای از یک تابع با برخی آرگومان‌های پیش‌فرض پرشده: python from functools import partial def power(base, exponent): return base ** exponent square = partial(power, exponent=2) print(square(4)) # 16 --- 4. 🧮 cmp_to_key برای تبدیل توابع مقایسه‌ای (قدیمی) به کلید قابل استفاده در sorted(): python from functools import cmp_to_key def compare(a, b): return a - b sorted_list = sorted([5, 2, 9], key=cmp_to_key(compare)) --- 5. 🧠 reduce برای کاهش لیستی از مقادیر به یک مقدار واحد (مثل جمع، ضرب، ...): python from functools import reduce result = reduce(lambda x, y: x + y, [1, 2, 3, 4]) print(result) # 10 > 🔸 در پایتون 3، reduce از ماژول functools آورده می‌شود (در پایتون 2 در builtin بود). --- 📌 لیست دیگر توابع مفید در functools تابع یا کلاس توضیح total_ordering ساخت مقایسه کامل از فقط چند متد singledispatch تعریف تابعی که بر اساس نوع آرگومان رفتار متفاوت دارد update_wrapper مثل @wraps برای انتقال متادیتا cached_property مثل property ولی با کش کردن نتیجه --- ✅ مثال ترکیبی python from functools import lru_cache, partial @lru_cache(maxsize=None) def factorial(n): return 1 if n == 0 else n * factorial(n - 1) triple = partial(pow, exponent=3) # خطا! چون pow آرگومان keyword نمی‌پذیرد | @LearnPythonIcy
تابع reduce در پایتون، ماژول functools دسترسی به قابلیت‌های تابعی (Functional Programming) زبان را فراهم می‌کند. یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش می‌دهد و نتایج میانی را در طول فرآیند حفظ می‌کند. به‌عنوان مثال، می‌توان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد: ابتدا عدد 1 در 2 ضرب می‌شود، سپس حاصل به‌دست‌آمده در 3 ضرب می‌گردد و این روند به همین شکل ادامه پیدا می‌کند.