آموزش پایتون
88 subscribers
281 photos
21 videos
81 files
178 links
ارتباط با ما:
@learnpythonicyBot

لینک گروه چت:
https://t.me/learnpythonicychat

لینک چنل ایتا:
https://eitaa.com/learnpythonicy
Download Telegram
✔️ ماژول functools یکی از ماژول‌های استاندارد پایتون است که ابزارهایی برای کار با توابع (functions) و callableها فراهم می‌کند. این ماژول بیشتر برای برنامه‌نویسی تابعی (functional programming) و کَش کردن، مرتب‌سازی، و ترکیب توابع استفاده می‌شود.


---

📦 کاربردهای اصلی 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
✔️ تابع reduce

در پایتون، ماژول functools دسترسی به قابلیت‌های تابعی (Functional Programming) زبان را فراهم می‌کند.
یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش می‌دهد و نتایج میانی را در طول فرآیند حفظ می‌کند.

به‌عنوان مثال، می‌توان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب می‌شود، سپس حاصل به‌دست‌آمده در 3 ضرب می‌گردد و این روند به همین شکل ادامه پیدا می‌کند.

#python | #functools | @learnpythonicy