🔆 یه وبسایت خوب برای یادگیری بازیسازی ساده با پایتون و pygame به همراه پروژه های عملی
🔹programarcadegames.com
🐍 @python_rd
🔹programarcadegames.com
🐍 @python_rd
❤3
🔆 پروژههای جالب و راحت برای افراد تازهکار در پایتون
🔹https://hackr.io/blog/python-projects
🐍 @python_rd
🔹https://hackr.io/blog/python-projects
🐍 @python_rd
Hackr.io
Top 40 Python Projects for Programmers (Beginner to Advanced)
Explore 40+ hands-on Python projects, from beginner-friendly automation to professional portfolio applications, with step-by-step tutorials and video walkthroughs.
🔆 ۱۰۰ تکه کد کاربردی برای حل مسائل روزمره و رایج در برنامهنویسی پایتون
therenegadecoder.com/code/python-code-snippets-for-everyday-problems
🐍 @python_rd
therenegadecoder.com/code/python-code-snippets-for-everyday-problems
🐍 @python_rd
The Renegade Coder
100 Python Code Snippets for Everyday Problems | The Renegade Coder
Everything you regularly Google just found its place in this list. Say hello to a growing list of Python code snippets for everyday problems.
🔆 جادوی init_subclass: جایگزین مدرن و تمیز برای Metaclassها
🔹 اکثر پایتونکارها برای مانیتور کردن، ثبت (Registration) یا ولیدیشن کلاسهای فرزندی که از یک کلاس به ارث میرسن، سراغ Metaclass میرن. اما متانویسی کد رو پیچیده، سنگین و خواناییش رو سخت میکنه.
🔹 از پایتون ۳.۶ به بعد، یک «تاس جادویی» به اسم init_subclass اضافه شد که ۹۰٪ نیازهای شما به متانویسی رو بدون هیچ پیچیدگی برطرف میکنه!
🔹 کاربرد واقعیش کجاست؟ (ساخت یک Plugin System خودکار)
🔹 فرض کنید میخواید هر وقت کلاسی از کلاس پایه شما ارثبری کرد، اسمش تلقائی توی یک دیکشنری ثبت بشه:
🔹به چه دردی میخوره؟
بدون ساخت Metaclass پیچیده، رفتارهای ارثبری رو مدیریت میکنید.
میتونید ورودیهای سفارشی (مثل plugin_name) مستقیماً موقع ارثبری کلاس بهش بدید.
کد کاملاً تمیز، خوانا و مطابق استاندارد روز پایتونه.
🐍 @python_rd
🔹 اکثر پایتونکارها برای مانیتور کردن، ثبت (Registration) یا ولیدیشن کلاسهای فرزندی که از یک کلاس به ارث میرسن، سراغ Metaclass میرن. اما متانویسی کد رو پیچیده، سنگین و خواناییش رو سخت میکنه.
🔹 از پایتون ۳.۶ به بعد، یک «تاس جادویی» به اسم init_subclass اضافه شد که ۹۰٪ نیازهای شما به متانویسی رو بدون هیچ پیچیدگی برطرف میکنه!
🔹 کاربرد واقعیش کجاست؟ (ساخت یک Plugin System خودکار)
🔹 فرض کنید میخواید هر وقت کلاسی از کلاس پایه شما ارثبری کرد، اسمش تلقائی توی یک دیکشنری ثبت بشه:
class BasePlugin:
plugins = {}
def __init_subclass__(cls, plugin_name: str = None, **kwargs):
super().__init_subclass__(**kwargs)
# اگر نام پلاگین مشخص نشده بود، از اسم خود کلاس استفاده کن
name = plugin_name or cls.__name__
cls.plugins[name] = cls
# حالا هر پلاگینی تعریف بشه، اتوماتیک ثبت میشه:
class AudioPlugin(BasePlugin, plugin_name="audio_player"):
pass
class VideoPlugin(BasePlugin, plugin_name="video_player"):
pass
print(BasePlugin.plugins)
# خروجی:
# {'audio_player': <class '__main__.AudioPlugin'>, 'video_player': <class '__main__.VideoPlugin'>}
🔹به چه دردی میخوره؟
بدون ساخت Metaclass پیچیده، رفتارهای ارثبری رو مدیریت میکنید.
میتونید ورودیهای سفارشی (مثل plugin_name) مستقیماً موقع ارثبری کلاس بهش بدید.
کد کاملاً تمیز، خوانا و مطابق استاندارد روز پایتونه.
🐍 @python_rd
👍1
🔆 چرا نباید از global توی پروژههای پایتونی استفاده کنیم؟
🔹 متغیرهای Global با اینکه کار رو سریع راه میاندازن، اما چالشهای بزرگی ایجاد میکنن:
سخت شدن دیباگ: هر تابعی میتونه متغیر رو تغییر بده و پیدا کردن منشأ ارور سخت میشه.
تستنویسی کابوسوار: تستهای ایزوله (Unit Tests) به مشکل میخورن.
🔹جایگزین: پاس دادن متغیرها به عنوان پارامتر ورودی تابع، یا استفاده از الگوریتمهای Object-Oriented و تزریق وابستگی (Dependency Injection).
🐍 @python_rd
🔹 متغیرهای Global با اینکه کار رو سریع راه میاندازن، اما چالشهای بزرگی ایجاد میکنن:
سخت شدن دیباگ: هر تابعی میتونه متغیر رو تغییر بده و پیدا کردن منشأ ارور سخت میشه.
تستنویسی کابوسوار: تستهای ایزوله (Unit Tests) به مشکل میخورن.
🔹جایگزین: پاس دادن متغیرها به عنوان پارامتر ورودی تابع، یا استفاده از الگوریتمهای Object-Oriented و تزریق وابستگی (Dependency Injection).
🐍 @python_rd
❤5👍1
🔆 اجرای فرآیند پسزمینه بدون بلاک شدن برنامه با iter() دو آرگومانهای!
🔹 مفهوم: همه با شکل معمولی iter(iterable) آشنا هستیم. اما کمتر کسی میدونه که iter() یک فرم دو آرگومانهای به شکل iter(callable, sentinel) داره!
🔹 کاربرد واقعی: خواندن فایلهای حجیم یا Stream دیتابیس/شبکه تکهتکه (Chunk) تا زمانی که به یک مقدار خاص (Sentinel) برسی، بدون نیاز به نوشتن حلقه while True و شرطهای اضافه!
🔹 به چه دردی میخوره؟
کد فوقالعاده تمیز، پایتونیک و بدون نیاز به تعریف متغیرهای موقت درون حلقه میشه.
🐍 @python_rd
🔹 مفهوم: همه با شکل معمولی iter(iterable) آشنا هستیم. اما کمتر کسی میدونه که iter() یک فرم دو آرگومانهای به شکل iter(callable, sentinel) داره!
🔹 کاربرد واقعی: خواندن فایلهای حجیم یا Stream دیتابیس/شبکه تکهتکه (Chunk) تا زمانی که به یک مقدار خاص (Sentinel) برسی، بدون نیاز به نوشتن حلقه while True و شرطهای اضافه!
# خواندن یک فایل خطبهخط یا بلوکی تا رسیدن به خط خالی:
with open('data.txt', 'r') as f:
# حلقه تا زمانی ادامه پیدا میکنه که خروجی f.readline برابر '' (خط خالی) بشه
for line in iter(f.readline, ''):
process(line.strip())
🔹 به چه دردی میخوره؟
کد فوقالعاده تمیز، پایتونیک و بدون نیاز به تعریف متغیرهای موقت درون حلقه میشه.
🐍 @python_rd
🔆 فایل pip.conf؛ امن کردن Pip جلوی حملات Supply Chain!
🔹 خیلی وقتها توی پروژهها پکیجهای شخصی یا سازمانی نصب میکنیم. حملهای به اسم Dependency Confusion وجود داره که اگر نام پکیج داخلی شما با یک پکیج عمومی روی PyPI یکی باشه، Pip ممکنه نسخه مخرب عمومی رو دانلود کنه!
🔹 راه حل: ایجاد یک فایل کانفیگ اختصاصی برای Pip تا اولویت دانلود رو فقط روی مخزن امن تنظیم کنه:
🔹 به چه دردی میخوره؟
با اضافه کردن require-hashes = true حتی اگر کسی پکیجی روی PyPI رو هک کنه و تغییر بده، تا زمانی که Hash اون تغییر نکرده باشه Pip اجازه نصب نمیده. این نکته برای کسانی که پروژه واقعی و تجاری میزنن عالیه.
🐍 @python_rd
🔹 خیلی وقتها توی پروژهها پکیجهای شخصی یا سازمانی نصب میکنیم. حملهای به اسم Dependency Confusion وجود داره که اگر نام پکیج داخلی شما با یک پکیج عمومی روی PyPI یکی باشه، Pip ممکنه نسخه مخرب عمومی رو دانلود کنه!
🔹 راه حل: ایجاد یک فایل کانفیگ اختصاصی برای Pip تا اولویت دانلود رو فقط روی مخزن امن تنظیم کنه:
# مسیر فایل: ~/.config/pip/pip.conf
[global]
index-url = https://your-private-repo.com/simple
extra-index-url = https://pypi.org/simple
require-hashes = true
🔹 به چه دردی میخوره؟
با اضافه کردن require-hashes = true حتی اگر کسی پکیجی روی PyPI رو هک کنه و تغییر بده، تا زمانی که Hash اون تغییر نکرده باشه Pip اجازه نصب نمیده. این نکته برای کسانی که پروژه واقعی و تجاری میزنن عالیه.
🐍 @python_rd
🔆 تکنیک ناشناخته و حرفهای functools.singledispatch (اورلود کردن توابع در پایتون بدون if/elseهای طولانی!)
🔹 چطوری تو پایتون تابع Overloading تمیز بنویسیم؟
خیلی وقتها پیش میاد که میخوایم یه تابع بستگی به اینکه چه جنس ورودیای (String, List, Dict...) بهش میدیم، رفتار متفاوتی داشته باشه. روش مبتدیانه چیه؟ نوشتن یه سلسله if isinstance(...) طولانی!
اما روش سینیورها توی پایتون استفاده از singledispatch از کتابخونه استاندارد functools هست.
🔹به چه دردی میخوره؟
کد بسیار کپسوله، خلوت و خوانا میشه.
اصل Open/Closed رعایت میشه (میتونی بعداً بدون دست زدن به تابع اصلی، تایپ جدید اضافه کنی).
🐍 @python_rd
🔹 چطوری تو پایتون تابع Overloading تمیز بنویسیم؟
خیلی وقتها پیش میاد که میخوایم یه تابع بستگی به اینکه چه جنس ورودیای (String, List, Dict...) بهش میدیم، رفتار متفاوتی داشته باشه. روش مبتدیانه چیه؟ نوشتن یه سلسله if isinstance(...) طولانی!
اما روش سینیورها توی پایتون استفاده از singledispatch از کتابخونه استاندارد functools هست.
from functools import singledispatch
@singledispatch
def process_data(data):
raise NotImplementedError("این تایپ پشتیبانی نمیشه!")
@process_data.register(str)
def _(data):
return f"متن پردازش شد: {data.upper()}"
@process_data.register(list)
def _(data):
return f"لیست پردازش شد با طول: {len(data)}"
@process_data.register(dict)
def _(data):
return f"کلیدهای دیکشنری: {list(data.keys())}"
# تست تابع
print(process_data("hello")) # متن پردازش شد: HELLO
print(process_data([1, 2, 3])) # لیست پردازش شد با طول: 3
🔹به چه دردی میخوره؟
کد بسیار کپسوله، خلوت و خوانا میشه.
اصل Open/Closed رعایت میشه (میتونی بعداً بدون دست زدن به تابع اصلی، تایپ جدید اضافه کنی).
🐍 @python_rd
👍2
🔆 مجموعهای از نکات و تقلبنامههایی برای زبان برنامهنویسی پایتون
🔹https://gto76.github.io/python-cheatsheet
🐍 @python_rd
🔹https://gto76.github.io/python-cheatsheet
🐍 @python_rd
gto76.github.io
Comprehensive Python Cheatsheet
Exhaustive, simple, beautiful and concise. A truly Pythonic cheat sheet about Python programming language.
❤1
🔆 نکات کلیدی برای تمیزتر کد زدن در پایتون و چندزبان دیگر
🔹github.com/zedr/clean-code-python
🔹github.com/jupeter/clean-code-php
🔹github.com/ryanmcdermott/clean-code-javascript
🔹github.com/thangchung/clean-code-dotnet
🔹github.com/labs42io/clean-code-typescript
🐍 @python_rd
🔹github.com/zedr/clean-code-python
🔹github.com/jupeter/clean-code-php
🔹github.com/ryanmcdermott/clean-code-javascript
🔹github.com/thangchung/clean-code-dotnet
🔹github.com/labs42io/clean-code-typescript
🐍 @python_rd