🔆 پرسپترون - آموزش عملی از کوچکترین عنصر شبکههای عصبی و تاریخچه اون به همراه پیاده سازی پایتون
🔹 https://pabloinsente.github.io/the-perceptron
🐍 @python_rd
🔹 https://pabloinsente.github.io/the-perceptron
🐍 @python_rd
🔆 باز کردن فایلهای Zip بدون Extraxt کردن!
🔹فرض کن یه فایل Zip داری که توش پر از فایلهای متنی یا CSV هست و فقط میخوای محتوای یکیشون رو توی پایتون بخونی. نیازی نیست کل فایل رو روی هارد Extract کنی
🔹پایتون ماژول داخلی به اسم zipfile داره که این کار رو مستقیماً توی حافظه (RAM) انجام میده:
🔹 به چه دردی میخوره اصلا؟
۱. سرعت بالا: نیازی به درگیر کردن I/O دیسک نیست.
۲. کد تمیزتر: نیازی نیست فایلهای موقت اکسترکتشده رو بعد از تموم شدن کار پاک کنی.
🐍 @python_rd
🔹فرض کن یه فایل Zip داری که توش پر از فایلهای متنی یا CSV هست و فقط میخوای محتوای یکیشون رو توی پایتون بخونی. نیازی نیست کل فایل رو روی هارد Extract کنی
🔹پایتون ماژول داخلی به اسم zipfile داره که این کار رو مستقیماً توی حافظه (RAM) انجام میده:
import zipfile
# باز کردن فایل زیپ بدون اکسترکت روی دیسک
with zipfile.ZipFile('data.zip', 'r') as z:
# خواندن مستقیم محتوای یک فایل داخل زیپ
with z.open('notes.txt') as f:
content = f.read().decode('utf-8')
print(content)
🔹 به چه دردی میخوره اصلا؟
۱. سرعت بالا: نیازی به درگیر کردن I/O دیسک نیست.
۲. کد تمیزتر: نیازی نیست فایلهای موقت اکسترکتشده رو بعد از تموم شدن کار پاک کنی.
🐍 @python_rd
❤3
🔆 نسخه فارسی دیزاین پترن به زبان آدمیزاد که برای زبانهای برنامهنویسی دیگه به جز پایتون و جاوا هم مثالهای خوبی زده. در کنار ریپوهای اصلی انگلیسی که خوندشون خیلی به مهارتهای یک مهندس نرمافزار کمک میکنه.
🔹 Persian:
https://github.com/3lf/design-patterns-for-humans
🔹 English Version: https://github.com/rommel-sunga/design-patterns-for-humans-python
https://github.com/kamranahmedse/design-patterns-for-humans
🐍 @python_rd
🔹 Persian:
https://github.com/3lf/design-patterns-for-humans
🔹 English Version: https://github.com/rommel-sunga/design-patterns-for-humans-python
https://github.com/kamranahmedse/design-patterns-for-humans
🐍 @python_rd
GitHub
GitHub - 3lf/design-patterns-for-humans: آموزش دیزاین پترن به زبون آدمیزاد - Teaching design patterns in Persian
آموزش دیزاین پترن به زبون آدمیزاد - Teaching design patterns in Persian - 3lf/design-patterns-for-humans
🔆 با کمک این سایت و تمرینات باحال و interactive اش اگه تا حالا پایتون رو یاد نگرفتید شروع کنید یادگرفتن. از ساده داره تا سخت و مسائل جالبی رو مطرح میکنه
https://genepy.org/exercises
https://genepy.org/exercises
❤1
بچه ها خارج از موضوع کانال، اگه VPN نیاز دارید بهتون
🔹@Red_fire_vpn
رو معرفی و پیشنهاد میکنم.
تبلیغ نیست، قیمتاشون پایینه کیفیتشونم خوبه. از بچههای خودمونم هستن غریبه نیستن😁
خودمم ازشون خرید کردم.
🔹@Red_fire_vpn
رو معرفی و پیشنهاد میکنم.
تبلیغ نیست، قیمتاشون پایینه کیفیتشونم خوبه. از بچههای خودمونم هستن غریبه نیستن😁
خودمم ازشون خرید کردم.
🔆 قدرت Generator ها
چرا لیستهای بزرگ توی پایتون حافظه رو میترکونن؟
🔹 وقتی مینویسی
تمام این لیست میره توی RAM. اگه به جای
از پرانتز
استفاده کنی، داری از
استفاده میکنی.
🔹تفاوت؟ جنریتورها آیتمها رو یکییکی تولید میکنن (Lazy Evaluation). یعنی به جای اشغال کردن فضای زیاد، فقط وقتی لازم داری محاسبه میشن. برای پردازش فایلهای بزرگ یا دیتای حجیم، جنریتورها بهترین دوست تو هستن.
🐍 @python_rd
چرا لیستهای بزرگ توی پایتون حافظه رو میترکونن؟
🔹 وقتی مینویسی
[x for x in range(1000000)]
تمام این لیست میره توی RAM. اگه به جای
[]
از پرانتز
()
استفاده کنی، داری از
Generator
استفاده میکنی.
🔹تفاوت؟ جنریتورها آیتمها رو یکییکی تولید میکنن (Lazy Evaluation). یعنی به جای اشغال کردن فضای زیاد، فقط وقتی لازم داری محاسبه میشن. برای پردازش فایلهای بزرگ یا دیتای حجیم، جنریتورها بهترین دوست تو هستن.
🐍 @python_rd
👍6
🔆دیباگ حرفهای در جنگو
🔹 با
🔹 خیلی وقتها فکر میکنیم کدمون بهینه است، اما وقتی پنل دیباگ رو باز میکنیم، میبینیم ۱۰ تا کوئری تکراری به دیتابیس زدیم. این ابزار بهت نشون میده دقیقاً چند تا کوئری، در چه زمانی و با چه پارامترهایی اجرا شدن.
🔹 بهترین راه برای شناسایی مشکلاتی مثل N+1 Query همینه.
🐍 @python_rd
🔹 با
django-debug-toolbar رفیق شو!🔹 خیلی وقتها فکر میکنیم کدمون بهینه است، اما وقتی پنل دیباگ رو باز میکنیم، میبینیم ۱۰ تا کوئری تکراری به دیتابیس زدیم. این ابزار بهت نشون میده دقیقاً چند تا کوئری، در چه زمانی و با چه پارامترهایی اجرا شدن.
🔹 بهترین راه برای شناسایی مشکلاتی مثل N+1 Query همینه.
🐍 @python_rd
🔥1
🔆 چرا پایتون کندتر از C عه، ولی دنیای AI و Data Science رو فتح کرده؟
🔹همهمون شنیدیم که میگن «پایتون یک زبان کنده!». خب اگه کنده، چرا OpenAI، Google و Meta پروژههای هوش مصنوعیشون رو روی پایتون پیاده میکنن؟
راز داستان چیه؟
🔹 ۱. کتابخونههای C/C++ تحت پوشش:
کتابخونههای سنگینی مثل NumPy یا PyTorch روی پایتون اجرا میشن، اما هسته اصلیشون با C و C++ نوشته شده! پایتون فقط نقش یک «چسب» خوشدست رو بازی میکنه.
🔹 ۲. سرعت توسعه > سرعت اجرا:
در دنیای واقعی، زمانی که برنامه نویس صرف کدزدن میکنه گرونتر از زمان پردازش سروره!
🔹 ۳. GIL (Global Interpreter Lock):
قفلی که جلوی اجرای همزمان واقعی چند ترد (Multi-threading) رو میگرفت، حالا در نسخههای جدید پایتون (Python 3.13+) داره اختیاری/حذف میشه تا پایتون سریعتر از همیشه بشه.
🐍 @python_rd
🔹همهمون شنیدیم که میگن «پایتون یک زبان کنده!». خب اگه کنده، چرا OpenAI، Google و Meta پروژههای هوش مصنوعیشون رو روی پایتون پیاده میکنن؟
راز داستان چیه؟
🔹 ۱. کتابخونههای C/C++ تحت پوشش:
کتابخونههای سنگینی مثل NumPy یا PyTorch روی پایتون اجرا میشن، اما هسته اصلیشون با C و C++ نوشته شده! پایتون فقط نقش یک «چسب» خوشدست رو بازی میکنه.
🔹 ۲. سرعت توسعه > سرعت اجرا:
در دنیای واقعی، زمانی که برنامه نویس صرف کدزدن میکنه گرونتر از زمان پردازش سروره!
🔹 ۳. GIL (Global Interpreter Lock):
قفلی که جلوی اجرای همزمان واقعی چند ترد (Multi-threading) رو میگرفت، حالا در نسخههای جدید پایتون (Python 3.13+) داره اختیاری/حذف میشه تا پایتون سریعتر از همیشه بشه.
🐍 @python_rd
🔆 افزایش ۱۰ برابری سرعت برنامههای پایتون فقط با ۱ خط کد!
🔹 تا حالا شده توی پایتون یک تابع محاسباتی سنگین (مثل فاکتوریل، فیبوناچی یا پردازش داده) داشته باشی که با ورودیهای تکراری مدام اجرا بشه و سیپییو رو درگیر کنه؟
🔹پایتون برای این کار یک ابزار فوقالعاده توی کتابخونه داخلی functools داره به اسم @cache (یا @lru_cache).
🔹 روش عادی (اجرای مجدد محاسبات تکراری):
🔹روش هوشمندانه با Cache (ذخیره نتایج قبلی در حافظه):
🔹 چطور کار میکنه؟
وقتی دکوراتور @cache رو بالای تابع میذاری، پایتون ورودیها و خروجیهای تابع رو یادش میمونه. دفعه بعد که همون ورودی داده بشه، به جای محاسبه مجدد، بلافاصله جواب رو از رم برمیگردونه!
🐍 @python_rd
🔹 تا حالا شده توی پایتون یک تابع محاسباتی سنگین (مثل فاکتوریل، فیبوناچی یا پردازش داده) داشته باشی که با ورودیهای تکراری مدام اجرا بشه و سیپییو رو درگیر کنه؟
🔹پایتون برای این کار یک ابزار فوقالعاده توی کتابخونه داخلی functools داره به اسم @cache (یا @lru_cache).
🔹 روش عادی (اجرای مجدد محاسبات تکراری):
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
# برای n = 35 چند ثانیه طول میکشه و میلیونها محاسبه تکراری انجام میده!
print(fibonacci(35))
🔹روش هوشمندانه با Cache (ذخیره نتایج قبلی در حافظه):
from functools import cache
@cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
# اجرای همون کد در کسری از میلیثانیه (O(n) به جای O(2^n))!
print(fibonacci(35))
🔹 چطور کار میکنه؟
وقتی دکوراتور @cache رو بالای تابع میذاری، پایتون ورودیها و خروجیهای تابع رو یادش میمونه. دفعه بعد که همون ورودی داده بشه، به جای محاسبه مجدد، بلافاصله جواب رو از رم برمیگردونه!
🐍 @python_rd
❤4🔥1
🔆دام خطرناک لیست پیشفرض در تابع
🔹این کد در نگاه اول درست به نظر میرسه:
🔹اما لیست items فقط یکبار ساخته میشه و بین همهی فراخوانیها مشترکه!
راه درست:
🐍 @python_rd
🔹این کد در نگاه اول درست به نظر میرسه:
def add_item(item, items=[]):
items.append(item)
return items
🔹اما لیست items فقط یکبار ساخته میشه و بین همهی فراخوانیها مشترکه!
راه درست:
def add_item(item, items=None):
if items is None:
items = []
items
🐍 @python_rd
👍2👎1
🔆 یک خط کد که جلوی باگهای عجیب رو میگیره!
🔹 بهجای اینکه فایل رو دستی باز و بسته کنی، از with استفاده کن:
🔹 حتی اگه وسط کار خطا رخ بده، پایتون فایل رو درست میبنده.
کد تمیزتر، مدیریت منابع بهتر، باگ کمتر.
🐍 @python_rd
🔹 بهجای اینکه فایل رو دستی باز و بسته کنی، از with استفاده کن:
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()
🔹 حتی اگه وسط کار خطا رخ بده، پایتون فایل رو درست میبنده.
کد تمیزتر، مدیریت منابع بهتر، باگ کمتر.
🐍 @python_rd
🔆این ۳ تا سایت بصورت تقلبطور نکات کلی در مورد format string توی پایتون رو خلاصه کردن و با مثال توضیح دادن
🔹https://strftime.org/
🔹https://pyformat.info/
🔹https://www.strfti.me/
🐍 @python_rd
🔹https://strftime.org/
🔹https://pyformat.info/
🔹https://www.strfti.me/
🐍 @python_rd
BairesDev
Python strftime Cheatsheet | BairesDev
A quick reference for Python strftime format codes with examples. Easily look up date and time formatting directives.
🔆کتاب خوبی برای یادگیری مفاهیم یادگیری عمیق به همراه notebook های پایتون که مربوط به کدهای داخل کتابه.
🔹https://udlbook.github.io/udlbook
🐍 @python_rd
🔹https://udlbook.github.io/udlbook
🐍 @python_rd
🔆لیستی از سوالات مرتبط با سیستم type annotation در زبان پایتون که احتمالا قبلا بهشون برخورد نکرده بودید.
🔹https://python-type-challenges.zeabur.app
🐍 @python_rd
🔹https://python-type-challenges.zeabur.app
🐍 @python_rd
🔆 پیادهسازی پایتونی پروژههای کتاب معروف "the big book of small python projects"
🔹https://github.com/nihathalici/The-Big-Book-of-Small-Python-Projects
🐍 @python_rd
🔹https://github.com/nihathalici/The-Big-Book-of-Small-Python-Projects
🐍 @python_rd
🙏1
🔆 ترفند: کد تمیزتر و سریعتر با dict.get() به جای if-else
🔹 خیلی از برنامهنویسها موقع گرفتن مقدار از یک دیکشنری، اول بررسی میکنن ببینن کلید وجود داره یا نه. این کار کد رو طولانی و شلوغ میکنه.
🔹 روش معمولی و شلوغ:
🔹 روش حرفهای:
🔹 چرا این روش بهتره؟
* کد کوتاهتر: ۴ خط کد تبدیل به ۱ خط میشه.
* جلوگیری از KeyError: اگر کلید وجود نداشته باشه، برنامهت کرش نمیکنه.
* خوانایی بالا: کدت خواناتر و حرفهایتر بهنظر میرسه.
🔹 نکته: اگر مقدار دوم متد .get() رو مشخص نکنی، به صورت پیشفرض None برمیگردونه.
🐍 @python_rd
🔹 خیلی از برنامهنویسها موقع گرفتن مقدار از یک دیکشنری، اول بررسی میکنن ببینن کلید وجود داره یا نه. این کار کد رو طولانی و شلوغ میکنه.
🔹 روش معمولی و شلوغ:
user_data = {"name": "Reza", "role": "Developer"}
if "age" in user_data:
age = user_data["age"]
else:
age = 18 # مقدار پیشفرض
print(age)🔹 روش حرفهای:
user_data = {"name": "Reza", "role": "Developer"}
# اگر کلید نباشه، خودکار مقدار پیشفرض رو برمیگردونه
age = user_data.get("age", 18)
print(age)🔹 چرا این روش بهتره؟
* کد کوتاهتر: ۴ خط کد تبدیل به ۱ خط میشه.
* جلوگیری از KeyError: اگر کلید وجود نداشته باشه، برنامهت کرش نمیکنه.
* خوانایی بالا: کدت خواناتر و حرفهایتر بهنظر میرسه.
🔹 نکته: اگر مقدار دوم متد .get() رو مشخص نکنی، به صورت پیشفرض None برمیگردونه.
🐍 @python_rd
🔆 متد init واقعاً Constructor نیست! (داستان واقعی ساخت Object در پایتون)
🔹 خیلیها فکر میکنند init شیء جدید را میسازد، اما در واقع این متد فقط شیء ساختهشده را مقداردهی اولیه (Initialize) میکند. سازندهٔ واقعی پایتون متد new است!
🔹 تفاوت اصلی در چیست؟
new:
یک classmethod است که خودِ متغیر cls را میگیرد، شیء جدید را ایجاد میکند و برمیگرداند.
init:
شیء ایجادشده (self) را میگیرد و ویژگیهای آن را تنظیم میکند.
🔹 نمونه کاربرد واقعی: پیادهسازی الگوی Singleton
اگر بخواهی کلاس فقط و فقط یک نمونه (Instance) در کل برنامه داشته باشد، باید سراغ new بروی:
🔹کاربرد دیگر: تغییر رفتار Typeهای Immutable (مثل تغییر دادن رفتار string یا tuple موقع ساخته شدن).
🐍 @python_rd
🔹 خیلیها فکر میکنند init شیء جدید را میسازد، اما در واقع این متد فقط شیء ساختهشده را مقداردهی اولیه (Initialize) میکند. سازندهٔ واقعی پایتون متد new است!
🔹 تفاوت اصلی در چیست؟
new:
یک classmethod است که خودِ متغیر cls را میگیرد، شیء جدید را ایجاد میکند و برمیگرداند.
init:
شیء ایجادشده (self) را میگیرد و ویژگیهای آن را تنظیم میکند.
🔹 نمونه کاربرد واقعی: پیادهسازی الگوی Singleton
اگر بخواهی کلاس فقط و فقط یک نمونه (Instance) در کل برنامه داشته باشد، باید سراغ new بروی:
class DatabaseConnection:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
# ساخت شیء فقط برای بار اول
cls._instance = super().__new__(cls)
return cls._instance
# تست:
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # Output: True (هر دو دقیقاً یک Object هستند)
🔹کاربرد دیگر: تغییر رفتار Typeهای Immutable (مثل تغییر دادن رفتار string یا tuple موقع ساخته شدن).
🐍 @python_rd
❤1
🔆 این سایت مسیرهای یادگیری گام به گام رو در اختیار شما قرار می ده که می تونید برای یادگیری حالتهای مختلف concurrency در پایتون ازشون استفاده کنید.
🔹https://superfastpython.com/learning-paths
🐍 @python_rd
🔹https://superfastpython.com/learning-paths
🐍 @python_rd
❤🔥1❤1
🔆 مدیریت منابع مثل حرفهایها: چطور با with مدیریت خطای تمیز بنویسیم؟
🔹دستور with رو همه برای باز کردن فایل (open) میشناسند، اما قدرتش خیلی بیشتر از این حرفهاست. هر جایی که نیاز به الگوی "آمادهسازی -> اجرا -> تمیزکاری" داری، Context Manager نجاتدهنده است.
🔹دو روش ساخت Context Manager سفارشی:
.روش اول: استفاده از Magic Methodها
با تعریف متدهای enter و exit در کلاس:
🔹روش دوم: راهکار سریعتر با contextlib
بدون نیاز به نوشتن کلاس و فقط با یک Generator:
🔹 به چه دردی میخوره؟
مدیریت Transactionهای دیتابیس، قفلهای Multithreading، و اندازهگیری زمان اجرای سرویسها.
🐍 @python_rd
🔹دستور with رو همه برای باز کردن فایل (open) میشناسند، اما قدرتش خیلی بیشتر از این حرفهاست. هر جایی که نیاز به الگوی "آمادهسازی -> اجرا -> تمیزکاری" داری، Context Manager نجاتدهنده است.
🔹دو روش ساخت Context Manager سفارشی:
.روش اول: استفاده از Magic Methodها
با تعریف متدهای enter و exit در کلاس:
import time
class Timer:
def __enter__(self):
self.start = time.perf_counter()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.end = time.perf_counter()
print(f"زمان اجرا: {self.end - self.start:.4f} ثانیه")
# اگر True برگردانی، خطاهای داخل بلوک with سائلنت میشوند!
return False
with Timer():
# کدی که میخواهی زمان اجرای آن سنجیده شود
sum(i**2 for i in range(1_000_000))
🔹روش دوم: راهکار سریعتر با contextlib
بدون نیاز به نوشتن کلاس و فقط با یک Generator:
from contextlib import contextmanager
@contextmanager
def managed_resource():
print("۱. تخصیص منبع (Connect / Open)")
try:
yield "Resource Object"
finally:
print("۲. آزادسازی منبع (Disconnect / Close)")
# استفاده:
with managed_resource() as res:
print(f"در حال کار با {res}")
🔹 به چه دردی میخوره؟
مدیریت Transactionهای دیتابیس، قفلهای Multithreading، و اندازهگیری زمان اجرای سرویسها.
🐍 @python_rd
❤1
🔆سایت منابع و نکاتی برای بهتر ساختن اپلیکیشنهای با کیفیت بالا که البته بیشتر در مورد پایتون و جنگو و فلسک مطلب داره.
🔹https://testdriven.io
🐍 @python_rd
🔹https://testdriven.io
🐍 @python_rd