✔️ ماژول functools یکی از ماژولهای استاندارد پایتون است که ابزارهایی برای کار با توابع (functions) و callableها فراهم میکند. این ماژول بیشتر برای برنامهنویسی تابعی (functional programming) و کَش کردن، مرتبسازی، و ترکیب توابع استفاده میشود.
---
📦 کاربردهای اصلی functools
در ادامه مهمترین ابزارها و دکوراتورهای این ماژول را توضیح میدهم:
---
1. 🔁 @lru_cache و @cache
برای کَش کردن نتایج توابع:
مناسب برای توابعی با محاسبهی سنگین که بارها با ورودیهای تکراری فراخوانی میشوند.
---
2. 🪝 @wraps
برای حفظ متادیتا (مثل name, doc) هنگام نوشتن دکوراتورهای سفارشی:
---
3. 🧩 partial
برای ساختن نسخهای از یک تابع با برخی آرگومانهای پیشفرض پرشده:
---
4. 🧮 cmp_to_key
برای تبدیل توابع مقایسهای (قدیمی) به کلید قابل استفاده در sorted():
---
5. 🧠 reduce
برای کاهش لیستی از مقادیر به یک مقدار واحد (مثل جمع، ضرب، ...):
> 🔸 در پایتون 3، reduce از ماژول functools آورده میشود (در پایتون 2 در builtin بود).
---
📌 لیست دیگر توابع مفید در functools
تابع یا کلاس توضیح
total_ordering
ساخت مقایسه کامل از فقط چند متد
singledispatch
تعریف تابعی که بر اساس نوع آرگومان رفتار متفاوت دارد
update_wrapper
مثل @wraps برای انتقال متادیتا
cached_property
مثل property ولی با کش کردن نتیجه
---
✅ مثال ترکیبی
#functools | @LearnPythonIcy
---
📦 کاربردهای اصلی functools
در ادامه مهمترین ابزارها و دکوراتورهای این ماژول را توضیح میدهم:
---
1. 🔁 @lru_cache و @cache
برای کَش کردن نتایج توابع:
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) هنگام نوشتن دکوراتورهای سفارشی:
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
برای ساختن نسخهای از یک تابع با برخی آرگومانهای پیشفرض پرشده:
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():
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
برای کاهش لیستی از مقادیر به یک مقدار واحد (مثل جمع، ضرب، ...):
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 ولی با کش کردن نتیجه
---
✅ مثال ترکیبی
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 نمیپذیرد
#functools | @LearnPythonIcy
❤3
🔍 راهنمای #هشتگها برای دسترسی سریعتر به مطالب کانال
برای اینکه راحتتر به مطالب دلخواهتون برسید، از هشتگهای زیر استفاده کنید:
---
### 😂 #طنز
مطالب فان و خندهدار برای فاصله گرفتن از دنیای کدنویسی.
### 🧪 #تست_تایم
تستها و تمرینهایی که باید برای تقویت مهارتهای برنامهنویسی بزنید.
### 📘 #بدانیم
نکات مهم و کاربردی دربارهی برنامهنویسی و پایتون.
### 📚 #بخوانیم
دانستنیها و مقالاتی که پیشنهاد میکنم حتما مطالعه کنید.
### 📖 #معرفی_کتاب / #بوک_تایم
کتابهای پیشنهادی برای یادگیری اصولیتر.
### 🔥 #موتیو_تایم
پستهای انگیزشی و انرژیبخش برای ادامهی مسیر یادگیری.
### 📚 #کتابخانه
کتابخانههایی که در کانال معرفی شدهاند.
### 📃 #برگه_تقلب و #Cheat_Sheet
خلاصه و نکات کلیدی
---
### 🎮 #game
بازی های ساخته شده با پایتون
### 🛣 #roadmap
نقشهراه یادگیری پایتون و مهارتهای لازم.
### 🧩 #project_time
پروژههای تمرینی برای افزایش تجربه و تسلط.
### 📄 #paper
مقالات علمی و تخصصی معرفیشده.
---
### ⚡️ #PythonTricks
میانبرها و ترفندهای کاربردی پایتون.
### ✨ #Pythonmagic
رفتارهای خاص و جالب پایتون که کمتر کسی میداند.
### 🧰 #functools
ابزارها و تکنیکهای مرتبط با توابع.
### 🧱 #codeBites
خلاصهی یک دستور همراه با نمونهکد کوتاه.
### ❗️ #error
خطاهای رایج پایتون و روش رفع آنها.
### 📰 #news
اخبار روز پایتون و دنیای تکنولوژی.
### 🖼 #carousel
پستهای اسلایدری برای آموزش موضوعات مختلف.
---
### 🤖 #AI
هوش مصنوعی
### 📊 #ML
یادگیری ماشین
### 🧠 #DL
یادگیری عمیق (ژرف)
---
## 🔎 جستجوی سریع دستورات و کتابخانهها
هر دستور یا کتابخانهای که لازم دارید کافیست هشتگش را جستجو کنید:
#split
#while
#class
#for
#dict
#list
#opencv
#cv2
#numpy
#matplotlib
#tkinter
و …
---
## 🎯 دورهها و تمرینها
📘 دوره آموزش مقدماتی پایتون
🧪 حل ۳۰ سؤال کاربردی برای تقویت مهارتهای دوره مقدماتی
🎖چالش ۳۰ روزه Python for AI
برای اینکه راحتتر به مطالب دلخواهتون برسید، از هشتگهای زیر استفاده کنید:
---
### 😂 #طنز
مطالب فان و خندهدار برای فاصله گرفتن از دنیای کدنویسی.
### 🧪 #تست_تایم
تستها و تمرینهایی که باید برای تقویت مهارتهای برنامهنویسی بزنید.
### 📘 #بدانیم
نکات مهم و کاربردی دربارهی برنامهنویسی و پایتون.
### 📚 #بخوانیم
دانستنیها و مقالاتی که پیشنهاد میکنم حتما مطالعه کنید.
### 📖 #معرفی_کتاب / #بوک_تایم
کتابهای پیشنهادی برای یادگیری اصولیتر.
### 🔥 #موتیو_تایم
پستهای انگیزشی و انرژیبخش برای ادامهی مسیر یادگیری.
### 📚 #کتابخانه
کتابخانههایی که در کانال معرفی شدهاند.
### 📃 #برگه_تقلب و #Cheat_Sheet
خلاصه و نکات کلیدی
---
### 🎮 #game
بازی های ساخته شده با پایتون
### 🛣 #roadmap
نقشهراه یادگیری پایتون و مهارتهای لازم.
### 🧩 #project_time
پروژههای تمرینی برای افزایش تجربه و تسلط.
### 📄 #paper
مقالات علمی و تخصصی معرفیشده.
---
### ⚡️ #PythonTricks
میانبرها و ترفندهای کاربردی پایتون.
### ✨ #Pythonmagic
رفتارهای خاص و جالب پایتون که کمتر کسی میداند.
### 🧰 #functools
ابزارها و تکنیکهای مرتبط با توابع.
### 🧱 #codeBites
خلاصهی یک دستور همراه با نمونهکد کوتاه.
### ❗️ #error
خطاهای رایج پایتون و روش رفع آنها.
### 📰 #news
اخبار روز پایتون و دنیای تکنولوژی.
### 🖼 #carousel
پستهای اسلایدری برای آموزش موضوعات مختلف.
---
### 🤖 #AI
هوش مصنوعی
### 📊 #ML
یادگیری ماشین
### 🧠 #DL
یادگیری عمیق (ژرف)
---
## 🔎 جستجوی سریع دستورات و کتابخانهها
هر دستور یا کتابخانهای که لازم دارید کافیست هشتگش را جستجو کنید:
#split
#while
#class
#for
#dict
#list
#opencv
#cv2
#numpy
#matplotlib
#tkinter
و …
---
## 🎯 دورهها و تمرینها
📘 دوره آموزش مقدماتی پایتون
🧪 حل ۳۰ سؤال کاربردی برای تقویت مهارتهای دوره مقدماتی
🎖چالش ۳۰ روزه Python for AI
✔️ تابع reduce
در پایتون، ماژول functools دسترسی به قابلیتهای تابعی (Functional Programming) زبان را فراهم میکند.
یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش میدهد و نتایج میانی را در طول فرآیند حفظ میکند.
بهعنوان مثال، میتوان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب میشود، سپس حاصل بهدستآمده در 3 ضرب میگردد و این روند به همین شکل ادامه پیدا میکند.
#python | #functools | @learnpythonicy
در پایتون، ماژول functools دسترسی به قابلیتهای تابعی (Functional Programming) زبان را فراهم میکند.
یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش میدهد و نتایج میانی را در طول فرآیند حفظ میکند.
بهعنوان مثال، میتوان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب میشود، سپس حاصل بهدستآمده در 3 ضرب میگردد و این روند به همین شکل ادامه پیدا میکند.
#python | #functools | @learnpythonicy