| کانال توسعه‌دهندگان پایتون |
7.54K subscribers
78 photos
3 videos
4 files
69 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
چرا متود copy همیشه کپی واقعی نمی‌سازه؟

یکی از باگ‌هایی که حتی برنامه‌نویس‌های با تجربه هم گاهی باهاش روبه‌رو میشن، تفاوت بین Copy و Deep Copy هست

فرض کنید این لیست رو داریم:

data = [
["Yasin", "Ali"],
["Math", "Science"]
]

حالا ازش کپی می‌گیریم:

new_data = data.copy()

خیلی‌ها فکر می‌کنن new_data کاملاً مستقل از data شده اما اینطور نیست

اگر این کار رو انجام بدیم:

new_data[0].append("Sina")

نتیجه:

print(data)

# خروجی 👇🏻
# [['Yasin', 'Ali', 'Sina'], ['Math', 'Science']]

چرا لیست اصلی هم تغییر کرد؟

چون copy() فقط لیست بیرونی رو کپی می‌کنه، ولی عناصر داخلش همچنان به همون آبجکت‌های قبلی اشاره می‌کنن.

به این میگن Shallow Copy

-——————————————--

🎈اما راه حل؟

وقتی ساختارهای تو در تو دارید با از از deepcopy استفاده کنید

from copy import deepcopy

new_data = deepcopy(data)

حالا هر تغییری روی new_data بدید روی data اثری نداره

🔴 نکته مهم 🔴

اگر داده‌های شما تو در تو نیستند، copy کاملاً کافی و سریع‌تره

اما اگر با لیست، دیکشنری یا آبجکت‌های تو در تو کار می‌کنید استفاده اشتباه از copy می‌تونه باگ‌ ایجاد کنه که وقتتون گرفته بشه

🔖 #Python #پایتون

👤 BʟᴀᴄᴋCᴀᴛ

💎 Channel: @DevelopixPython
👍9❤3🔥2
خیلی وقت‌ها پوشه Downloads شبیه یک انباری شلوغ می‌شود؛ pdf، عکس، zip، هر چیزی قاطی هم 😅
امروز یک اسکریپت واقعی و ساده با Python می‌سازیم که فایل‌ها را بر اساس نوع، به پوشه‌های جدا منتقل کند.

ایده از این آموزش الهام گرفته شده:
Real Python - Working With Files in Python

🧠 ایده کلی

Python برای کار با فایل‌ها و مسیرها کتابخانه‌های خیلی خوبی دارد، مخصوصاً pathlib و shutil.
کاری که می‌کنیم:

- پوشه Downloads را مانیتور نمی‌کنیم، فقط هر بار اسکریپت را اجرا کنیم
- بر اساس پسوند فایل (مثلاً .pdf یا .jpg) تصمیم می‌گیریم کجا برود
- اگر پوشه مقصد وجود نداشت، خودمان می‌سازیم

این مدل اسکریپت‌ها برای مرتب‌ نگه‌داشتن سیستم شخصی یا سیستم‌های روی سرور خیلی کاربردی است.

🛠 کتابخانه‌های مورد نیاز

همه چیز با کتابخانه‌های استاندارد Python انجام می‌شود:

- pathlib برای کار راحت‌تر با مسیرها
- shutil برای جابجا کردن فایل‌ها
- os اگر خواستیم تنظیمات خاص‌تری انجام بدهیم (اینجا خیلی کم استفاده می‌شود)

📦 کد نمونه: مرتب‌سازی فایل‌ها بر اساس پسوند

این یک مثال ساده و عملی است. مسیر DOWNLOADS_PATH را با مسیر سیستم خودتان عوض کنید 👇

from pathlib import Path
import shutil

# مسیر پوشه Downloads را مطابق سیستم خود تنظیم کنید
DOWNLOADS_PATH = Path.home() / "Downloads"

# مپ کردن پسوندها به پوشه‌های هدف
EXTENSION_MAP = {
".pdf": "PDFs",
".jpg": "Images",
".jpeg": "Images",
".png": "Images",
".zip": "Archives",
".rar": "Archives",
".mp4": "Videos",
".mp3": "Music",
}

for item in DOWNLOADS_PATH.iterdir():
if item.is_file():
ext = item.suffix.lower()
if ext in EXTENSION_MAP:
target_dir = DOWNLOADS_PATH / EXTENSION_MAP[ext]
target_dir.mkdir(exist_ok=True)

target_path = target_dir / item.name
# اگر فایلی با همین نام هست، نام را کمی عوض می‌کنیم
if target_path.exists():
target_path = target_dir / f"{item.stem}_copy{ext}"

shutil.move(str(item), str(target_path))


نکات کوچک اما مهم ✨

- قبل از اجرا، یک‌بار روی یک پوشه تستی امتحان شود تا مطمئن شوید مپ پسوندها را درست تعریف کرده‌اید.
- می‌توانید EXTENSION_MAP را مطابق نیاز خود بزرگ‌تر کنید (مثلاً برای فایل‌های .pptx، .csv و غیره).
- اگر با Windows کار می‌کنید و مسیر Downloads فرق دارد، از print(Path.home()) استفاده کنید تا مسیر خانه کاربر را ببینید.

چطور حرفه‌ای‌ترش کنیم؟

- اضافه کردن logging برای لاگ کردن کارهایی که روی فایل‌ها انجام می‌شود.
- ساختن یک CLI ساده با کتابخانه argparse تا بشود مسیر را از طریق command line داد.
- زمان‌بندی اجرای اسکریپت (مثلاً با Task Scheduler روی Windows یا cron روی Linux).

اگر پوشه Downloads شما همیشه شلوغ است، این اسکریپت یک نجات‌دهنده کوچک است 😄
امتحانش کنید و اگر دوست داشتید، با بقیه توسعه‌دهندگان پایتون هم به اشتراک بگذارید.

🔖 #Python #پایتون #Python #Automation #Files #pathlib #shutil #Scripting

👤 Developix

💎 Channel: @DevelopixPython
👍5❤4🔥1
💠 نسخه جدید محیط توسعه Pycharm منتشر شده است

🔸 ارتقا از نسخه 2026.1.4 به 2026.2

🔖 #pycharm, #python, #release

💎 @DevelopixPython
👍2
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.139.2 به 0.140.0

🔹 لیست تغییرات این نسخه:
- بهینه‌سازی مصرف حافظه در مدیریت وابستگی‌ها
- افزودن مستندات جدید «Library Skills»
- به‌روزرسانی مستندات برای استفاده پیش‌فرض از uv projects
- بازسازی ساختار صفحات «FastAPI People» و حامیان
- بهبود زیرساخت CI با افزودن بنچمارک حافظه و به‌روزرسانی حامیان و …

🔖 #fastapi, #python, #release

💎 @DevelopixPython
❤2
🐞 دیباگ سریع با تابع داخلی breakpoint()

وقتی یک باگ سمج وسط کد ظاهر می‌شود، به‌جای پرینت گرفتن‌های پشت‌سرهم، استفاده از breakpoint() خیلی تمیزتر و سریع‌تر است. از Python 3.7 به بعد این تابع داخل خود زبان هست و نیازی به import جداگانه ندارد.

کافی است هرجا نیاز به توقف و بررسی وضعیت متغیرها بود، یک breakpoint() بگذارید تا برنامه همان‌جا متوقف شود و وارد interactive debugger (پیش‌فرض: pdb) شوید.

def process_items(items):
total = 0
for i, item in enumerate(items):
if item < 0:
breakpoint() # اینجا وضعیت را چک کن
total += item
return total

result = process_items([1, 2, -3, 4])
print(result)


داخل debugger می‌شود متغیرها را چاپ کرد، روی کد قدم‌به‌قدم رفت، و سریع منطق مشکل‌دار را پیدا کرد. بعد از رفع مشکل، فقط همان خط breakpoint() را حذف یا comment کن.

🔗 مرجع رسمی Python: docs.python.org

🔖 #Python #پایتون #Python #debugging #breakpoint #pdb #best_practices

👤 Developix

💎 Channel: @DevelopixPython
❤8👍1
💠 نسخه جدید کتابخانه FastAPI منتشر شده است

🔸 ارتقا از نسخه 0.140.13 به 0.141.0

🔹 لیست تغییرات این نسخه:
- ✨ افزودن app.frontend(check_dir="auto") برای توسعهٔ ساده‌تر با fastapi dev
- و بهبودهای جزئی دیگر، و غیره

🔖 #fastapi, #python, #release

💎 @DevelopixPython
👍1
💠 نسخه جدید فریمورک جنگو (Django) منتشر شده است

🔸 ارتقا از نسخه 6.0.8 به 6.1.0

🔹 لیست تغییرات این نسخه:
- رفع باگ امنیتی شدید در lookupهای مکانی
- جلوگیری از DoS در check_for_language
- محدود کردن عمق مجموعه‌های هندسی تودرتو
- ایمن‌سازی لینک‌های URLField در ادمین
- رفع کرش bulk_create روی برخی دیتابیس‌ها
- به‌روزرسانی سازگاری با sqlparse 0.5.5 و موارد دیگر

🔖 #django, #python, #release

💎 @DevelopixPython
👍4
مدیریت درست resource مثل فایل، connection دیتابیس یا lock، کلی باگ و Memory Leak بالقوه را حذف می‌کند. پایتون برای این کار Context Manager دارد که با کلمهٔ کلیدی with استفاده می‌شود. 😌

ساده‌ترین مثال، کار با فایل است؛ بدون نیاز به close() یادت نرود:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()

بعد از تمام شدن بلاک، فایل به‌صورت خودکار بسته می‌شود؛ حتی اگر exception رخ بدهد. 👌

برای resourceهای خودت هم می‌شود Context Manager ساخت. راحت‌ترین راه در پروژه‌های کوچیک، استفاده از contextlib.contextmanager است:
from contextlib import contextmanager

@contextmanager
def temp_change_dir(path):
import os
old = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(old)

حالا هرجا لازم بود، فقط:
with temp_change_dir("/tmp"):
# کدهای وابسته به مسیر جدید
...

این الگو، کد را خواناتر، امن‌تر و تست‌پذیرتر می‌کند. دفعهٔ بعد که نیاز به setup/cleanup داشتی، به یک Context Manager کوچک فکر کن. ✨

🔗 رفرنس: Python docs - contextlib

🔖 #Python #پایتون #Python #context_manager #with #contextlib #best_practices #resources

👤 Developix

💎 Channel: @DevelopixPython
👍3❤1
🔥 پروژه: ‏DSPy فریم‌ورک برنامه‌نویسی LLM

DSPy یه فریم‌ورک پایتونی از آزمایشگاه NLP استنفورده که کمک می‌کند با LLMها برنامه‌نویسی کنی، نه Prompt نویسی دستی 🤖

به‌جای حفظ Promptها، ماژول‌های سطح‌بالا تعریف می‌کنی (مثلاً برای Question Answering، RAG یا Summarization) و DSPy خودش Prompt و Hyperparameterها را روی داده‌ات Optimize می‌کند.

برای ساخت Pipelineهای پایدار روی GPT و مدل‌های متن‌باز، گزینهٔ خیلی جدی‌ایه. سورس‌کد و مثال‌ها:
DSPy در گیت‌هاب

⭐️ 519 stars this week

🔖 #Python #پایتون #پایتون #یادگیری_ماشین #پردازش_زبان_طبیعی
❤1