✔️ ماژول typer (برای ساخت CLI حرفهای)
📌 هدف ماژول typer:
- ساخت ابزارهای Command Line (CLI) به سادگی و با Type Hints.
- جایگزین مدرن و آسان برای argparse و click.
- مناسب برای اتوماسیون، اسکریپتنویسی و برنامههای کاربردی.
هدف مثال:
- نشان میدهد چطور با ۴ خط کد یک CLI تعاملی بسازید!
- آموزش استفاده از آرگومانهای اجباری/اختیاری و Type Hints.
#typer | @LearnPythonIcy
✔️ مثال کاربردی با ماژول
toml🔹 کاربرد اصلی ماژول
tomlماژول
tomlدر پایتون برای کار با فایلهای پیکربندی با فرمت TOML طراحی شده است. فرمت TOML (مخفف *Tom's Obvious Minimal Language*) یک فرمت خوانا برای انسان و ماشین است که مخصوصاً برای فایلهای تنظیمات محبوب است. 🔸 مقایسه با JSON/YAML: - خوانایی بالاتر نسبت به JSON (مخصوصاً برای دادههای پیچیده). - سادهتر از YAML (بدان پیچیدگیهای فاصله و تو رفتگی). - استاندارد جدید پایتون برای تنظیمات پروژهها. 🔹 چرا TOML بهتر از JSON برای تنظیمات؟ - پشتیبانی از کامنت (برخلاف JSON). - نیاز به کوتیشن کمتر (مثلاً برای کلیدها). - خوانایی نزدیک به زبان طبیعی.
آموزش پایتون
✔️ مثال کاربردی با ماژول toml 🔹 کاربرد اصلی ماژول toml ماژول toml در پایتون برای کار با فایلهای
import toml # pip install toml
# ایجاد یک دیکشنری و ذخیره آن به فرمت TOML
config = {
"database": {
"host": "localhost",
"port": 5432,
"username": "admin",
"active": True
},
"settings": {
"debug_mode": False,
"max_connections": 100
}
}
# تبدیل دیکشنری به رشته TOML
toml_str = toml.dumps(config)
print("TOML String:\n", toml_str)
# نوشتن در فایل
with open("config.toml", "w") as f:
toml.dump(config, f)
# خواندن از فایل
with open("config.toml", "r") as f:
loaded_config = toml.load(f)
print("\nLoaded Config:", loaded_config)
✔️ ماژول 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 نمیپذیرد
#functools | @LearnPythonIcy
✔️ طبقهبندی سرطان پستان با PCA و رگرسیون لجستیک
این کد در دو مرحله، طبقهبندی روی دادههای سرطان پستان انجام میدهد:
⤵️ مرحله اول
1. دادههای سرطان پستان از sklearn بارگیری میشود.
2. دادهها به مجموعههای آموزش و آزمون تقسیم میشوند.
3. یک مدل رگرسیون لجستیک آموزش داده میشود.
4. دقت مدل روی دادههای آموزش و آزمون محاسبه و چاپ میشود.
⤵️ مرحله دوم
1. همان دادهها با StandardScaler نرمالسازی میشوند.
2. با استفاده از PCA بعد دادهها به 2 مولفه اصلی کاهش مییابد.
3. مجدداً دادهها تقسیم و مدل رگرسیون لجستیک آموزش داده میشود.
4. دقت مدل جدید محاسبه و چاپ میشود.
هدف مقایسه عملکرد مدل قبل و بعد از کاهش ابعاد با PCA است. این کد معمولاً برای نمایش تأثیر پیشپردازش داده و کاهش ابعاد بر عملکرد مدلهای یادگیری ماشین استفاده میشود.
👇کد پست بعدی
#pandas | #sklearn | #load_breast_cancer | @LearnPythonIcy
import pandas as pd
from sklearn.datasets import load_breast_cancer
(x, y) = load_breast_cancer(return_X_y= True)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test= train_test_split(x, y,random_state=0)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(random_state=0)
model.fit(x_train, y_train)
from sklearn.metrics import accuracy_score
print("Train Accuracy", accuracy_score(y_train, model.predict(x_train)))
print("Test Accuracy", accuracy_score(y_test, model.predict(x_test)))
import pandas as pd
from sklearn.datasets import load_breast_cancer
(x, y) = load_breast_cancer(return_X_y= True)
from sklearn.preprocessing import StandardScaler
x = StandardScaler().fit(x).transform(x)
from sklearn.decomposition import PCA
pca= PCA(n_components=2).fit(x)
x = pca.transform(x)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test= train_test_split(x, y,random_state=0)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(random_state=0)
model.fit(x_train, y_train)
from sklearn.metrics import accuracy_score
print("Train Accuracy", accuracy_score(y_train, model.predict(x_train)))
print("Test Accuracy", accuracy_score(y_test, model.predict(x_test)))
✔️ پروژههای پایتون از مبتدی تا پیشرفته!
اگر میخواهید پایتون را به صورت عملی یاد بگیرید، بهترین راه ساختن پروژههای واقعی است! در این پست ایدههایی از ساده تا حرفهای برای شما آماده کردهام:
🔹 سطح مبتدی (آشنایی با مبانی پایتون)
1️⃣ ماشین حساب ساده - عملیات پایه ریاضی
2️⃣ تبدیل واحد (دما، وزن، طول) - مثل سانتیگراد به فارنهایت
3️⃣ بازی حدس عدد - کامپیوتر یک عدد تصادفی انتخاب میکند و کاربر باید حدس بزند
4️⃣ لیست کارها (To-Do List) - افزودن، حذف و نمایش تسکها
🔸 سطح متوسط (کار با فایلها، کتابخانهها و دادهها)
5️⃣ مدیریت مخاطبان (دفترچه تلفن) - ذخیره و بازیابی اطلاعات از فایل
6️⃣ وباسکرپر ساده - استخراج داده از یک صفحه وب با
requestsو
BeautifulSoup7️⃣ پیشبینی آب و هوا - استفاده از APIهای رایگان مثل OpenWeatherMap 8️⃣ ربات تلگرام ساده - پاسخگویی خودکار با کتابخانه
python-telegram-bot🔺 سطح پیشرفته (پروژههای واقعی و پیچیده) 9️⃣ سیستم رزرو بلیط سینما - با پایگاه داده و رابط کاربری (Tkinter یا Django) 🔟 پلتفرم وب بلاگ - با جنگو یا Flask (احراز کاربر، نظرات، پستها) 1️⃣1️⃣ تشخیص چهره یا اشیا - با OpenCV و یادگیری ماشین 2️⃣1️⃣ تریدر خودکار ارز دیجیتال - تحلیل داده و APIنویسی (مثل Binance API) 💡 نکته: هرچه جلوتر بروید، چالشها جذابتر میشوند! 📌 شما چه پروژهای ساختهاید؟ #پایتون | #پروژه | #یادگیری_عملی | @Learnpythonicy
✔️ ۵ ترفند جادویی در پردازش تصویر با پایتون (OpenCV + PIL)
پردازش تصویر یکی از جذابترین بخشهای برنامهنویسی است. در اینجا تکنیکهای کاربردی را با کتابخانههای محبوب پایتون بررسی میکنیم:
1️⃣چرخش تصویر با حاشیههای هوشمند
import cv2
import numpy as np
img = cv2.imread('image.jpg')
assert img is not None, "تصویر یافت نشد!" # بررسی وجود فایل
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
rotated = cv2.warpAffine(img, M, (cols, rows), borderMode=cv2.BORDER_REFLECT)
cv2.imwrite('rotated.jpg', rotated)
بهینهسازی:
- اضافه کردن
assertبرای بررسی وجود فایل. - ذخیره خودکار خروجی با
imwrite. 2️⃣ فیلتر ترکیبی (Edge Detection + Blur) from PIL import Image, ImageFilter image = Image.open('image.jpg') edges = image.filter(ImageFilter.FIND_EDGES()) # تابع باید با حروف کوچک باشد: FIND_EDGES → FIND_EDGES blurred_edges = edges.filter(ImageFilter.GaussianBlur(radius=2)) blurred_edges.save('edges_blurred.jpg') 3️⃣ تغییر رنگهای خاص با HSV hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) lower_red = np.array([0, 100, 100]) upper_red = np.array([10, 255, 255]) mask = cv2.inRange(hsv, lower_red, upper_red) img[mask > 0] = [0, 255, 0] # تغییر رنگ قرمز به سبز cv2.imwrite('color_changed.jpg', img) نکته: - برای تشخیص بهتر قرمز، محدوده
[170, 100, 100]تا
[180, 255, 255]را نیز اضافه کنید. 4️⃣ تصحیح خودکار نور gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) equalized = cv2.equalizeHist(gray) cv2.imwrite('equalized_gray.jpg', equalized) # نسخه رنگی: yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) yuv[:,:,0] = cv2.equalizeHist(yuv[:,:,0]) equalized_color = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR) cv2.imwrite('equalized_color.jpg', equalized_color) 5️⃣ تشخیص چهره + تار کردن پسزمینه face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) mask = np.zeros_like(img) for (x,y,w,h) in faces: mask[y:y+h, x:x+w] = img[y:y+h, x:x+w] # حفظ چهره blurred_bg = cv2.GaussianBlur(img, (25,25), 0) result = np.where(mask==0, blurred_bg, mask) # ترکیب با ماسک cv2.imwrite('blurred_bg.jpg', result) 📚 کتابخانههای پیشنهادی - OpenCV: برای پردازش حرفهای تصویر. - Pillow: برای عملیات سادهتر. - scikit-image: برای الگوریتمهای پیشرفته (مثل exposure.equalize_adapthist). - matplotlib: برای نمایش گرافیکی نتایج. #PythonMagic | #بینایی_ماشین |@LearnPythonicy
✔️ پیدا کردن حروف منحصر به فرد در یک رشته
برای پیدا کردن حروف منحصر به فرد (حذف کاراکترهای تکراری از متن) در یک رشته، معمولاً از حلقهها و ساختارهای شرطی استفاده میکنیم:
unique_chars = []
for char in my_string:
if char not in unique_chars:
unique_chars.append(char)
اما پایتون یک روش حرفهای و بهینهتر ارائه میدهد:
unique_chars = list(set(my_string))
👀 چرا این روش کار میکند؟
- تابع set() به طور خودکار تمام عناصر تکراری را حذف میکند.
- با تبدیل نتیجه به لیست، خروجی مورد نظر ما را میدهد.
نکته:
اگر ترتیب حروف مهم است، میتوانید از dict استفاده کنید:
unique_ordered = list(dict.fromkeys(my_string))
این روش:
1. سریعتر و خوانا تر است
2. برای رشتههای طولانی کارایی بهتری دارد
3. کد را حرفهایتر نشان میدهد
#PythonTricks | #بدانیم | @LearnPythonIcy
✔️ محاسبه سریع فیبوناچی با روش ماتریسی!
برای محاسبه دنباله فیبوناچی معمولاً از روش بازگشتی استفاده میکنیم:
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
اما یک روش حرفهای با پیچیدگی O(log n) وجود دارد:
def fib(n):
def mat_pow(mat, power):
result = [[1,0],[0,1]]
while power > 0:
if power % 2 == 1:
result = mat_mult(result, mat)
mat = mat_mult(mat, mat)
power //= 2
return result
def mat_mult(a, b):
return [[a[0][0]*b[0][0] + a[0][1]*b[1][0],
a[0][0]*b[0][1] + a[0][1]*b[1][1]],
[a[1][0]*b[0][0] + a[1][1]*b[1][0],
a[1][0]*b[0][1] + a[1][1]*b[1][1]]]
if n == 0:
return 0
mat = [[1,1],[1,0]]
result = mat_pow(mat, n-1)
return result[0][0]
#پایتون | #الگوریتم | #بهینه_سازی | @learnpythonicy