PyCoders (پایتون)
4.07K subscribers
959 photos
148 videos
68 files
204 links
#پایتون جادوگر دنیای برنامه نویسی!
◇ معرفی حوزه های کاری پایتون
◇ معرفی کتابخونه های کاربردی
◇ معرفی دوره های مفید
◇ معرفی تکنیک ها و نکات
◇ نقشه راه حوزه های مختلف
◇ اخبار و آپدیت های پایتون
◇ و هر چیزی در مورد پایتون!

■ گروه پایتون:
@programmers_py
Download Telegram
🔆 تا حالا برای پیمایش همزمان دو لیست از range() استفاده کردی؟
پایتون یه راه تمیزتر داره: zip()

🔹با zip می‌تونی آیتم‌های دو لیست رو همزمان بگیری و کدت خیلی خواناتر بشه:

names = ["Ali", "Sara", "Reza"]
scores = [18, 20, 15]

for name, score in zip(names, scores):
print(name, score)

🔹کد کمتر، خوانایی بیشتر، حرفه‌ای‌تر.

🐍 @pyrhon_rd
🔥2👍1
🔆 معمولاً وقتی از تابع استاندارد zip استفاده می‌کنی، پایتون بدون هیچ اخطاری لیست کوتاه‌تر رو ملاک قرار میده و اضافه‌های لیست بلندتر رو کلاً نادیده می‌گیره.

🔹این یعنی اگه یه دیتای مهم توی اون آیتم‌های اضافی باشه، برنامه بدون اینکه هیچ خطایی بده، اون بخش رو حذف می‌کنه و ممکنه توی محاسباتت باگ عجیبی پیدا کنی که نفهمی از کجا اومده.

🔹استفاده از پارامتر strict=True توی پایتون، مثل یه نگهبان سخت‌گیر عمل می‌کنه و اگه طول لیست‌ها با هم یکی نباشه، بلافاصله یه ValueError پرتاب می‌کنه تا همون لحظه متوجه بشی دیتات مشکل داره.

🔹این یه مثال ساده برای درک بهترش:

# بدون strict: داده‌ی ۳۰ نادیده گرفته میشه و برنامه هیچی نمیگه
names = ['Ali', 'Reza']
ages = [20, 25, 30]
for n, a in zip(names, ages):
print(n, a)

# با strict: پایتون متوجه نابرابری میشه و ارور میده
# این کار کمک می‌کنه قبل از اینکه دیتای غلط پردازش بشه، متوقفش کنی
for n, a in zip(names, ages, strict=True):
print(n, a)


🔹به جای اینکه برنامت بی‌سروصدا غلط کار کنه، با این روش ترجیح میدی برنامه متوقف بشه تا بری و دیتای ناقص رو اصلاح کنی. این دقیقاً همون چیزیه که کدتو امن‌تر و قابل‌اطمینان‌تر می‌کنه.

🐍 @python_rd
👍1
🔆میدونستی else توی پایتون فقط مال if نیست؟

🔹یه قابلیت فوق‌العاده کاربردی که خیلی‌ها ازش غافل می‌مونن، استفاده از else بعد از حلقه‌های for یا while هست. این بلوک فقط و فقط زمانی اجرا میشه که حلقه به صورت کامل و عادی تموم بشه و با دستور break وسطش متوقف نشده باشه.

🔹این یعنی دیگه نیازی به متغیرهای اضافه برای چک کردن پیدا شدن یا نشدن آیتم‌ها نداری و کدت حسابی تمیز و حرفه‌ای میشه.

🔹فرض کن یه لیست داری و می‌خوای ببینی عددی مثل ۵ توش هست یا نه. به جای تعریف کردن یه پرچم یا flag، می‌تونی بنویسی که اگه حلقه تموم شد و خبری از عدد نبود، پیام «پیدا نشد» رو چاپ کنه.

numbers = [1, 2, 3, 4]

for num in numbers:
if num == 5:
print("عدد ۵ پیدا شد!")
break
else:
print("عدد ۵ توی لیست وجود نداره.")

🔹همون‌طور که می‌بینی، چون توی لیست خبری از ۵ نیست، پایتون بدون هیچ شرط اضافه‌ای می‌فهمه که باید بره سراغ بلاک else و اون رو اجرا کنه.

🐍 @python_rd
🔆 سه تا پروژه خیلی خفن پایتونی

🔹Virtual Steering

یعنی با حرکت دست بتونی فرمون ماشین رو توی بازی کنترل کنی، انگار یه فرمون مجازی جلوی دستته.

🔹 Virtual Portals

یه پروژه الهام‌گرفته از دکتر استرنج که با حرکات دست، پورتال‌های مجازی می‌سازی.

🔹Virtual Keyboard & Mouse

یعنی کیبورد و مووس مجازی که برای تایپ و کنترل سیستم استفاده می‌شه.

🔹اگر بخوام خیلی ساده بگم، منظور از این پروژه‌ها اینه که به‌جای ابزارهای فیزیکی، با حرکت دست و بینایی ماشین می‌شه سیستم رو کنترل کرد.

🔹یعنی ترکیبی از پایتون، هوش مصنوعی و پردازش تصویر برای ساخت تجربه‌های تعاملی و آینده‌محور.


🐍 @python_rd
👍1
🔹یه روش خیلی کاربردی توی پایتون اینه که به‌جای چندتا شرط پشت‌سرهم، از دیکشنری برای مدیریت حالت‌ها استفاده کنی.

🔹مثلاً وقتی قراره بر اساس نقش کاربر یه خروجی متفاوت بدی، به‌جای if/elifهای زیاد می‌تونی نقش‌ها رو داخل دیکشنری نگه داری.

🔹این کار هم کدت رو تمیزتر می‌کنه، هم توسعه‌دادنش راحت‌تره.
roles = {
"admin": "full access",
"editor": "edit access",
"user": "read access"
}

user_role = "editor"
print(roles.get(user_role, "no access"))


🐍 @python_rd
🔥2
🔆 یه نکته خیلی کاربردی دیگه اینه که توی شرط‌ها لازم نیست همیشه بنویسی:
if len(items) == 0:

🔹می‌تونی خیلی تمیزتر بنویسی:
if not items:

🔹 و برای حالت برعکس:
if items:

🔹 چون لیست خالی، رشته خالی، دیکشنری خالی و خیلی از آبجکت‌های خالی در پایتون False محسوب میشن.

🐍 @python_rd
👍9
99d69af5-4e5e-4482-a45a-fc19c507a35e.png
2.3 MB
🔆 والپیپر پایتون


🔹(محتوا کم آوردم)
🐍 @python_rd
🤣62😁1
🔆 یه منبع خوب برای تمرین پایتون

🔹 یه سر به Pynative.com بزن. این سایت بخش Python Exercises رو داره که تمرین‌هاش رو خیلی مرتب و موضوعی دسته‌بندی کرده؛ از Loops و Input/Output گرفته تا Functions و Lists.

🔹چیزی که این سایت رو کاربردی‌تر می‌کنه اینه که هر تمرین فقط یه صورت‌مسئله ساده نیست، بلکه توضیح کامل مسئله، ورودی و خروجی مورد انتظار، بخش Hint برای راهنمایی، و در نهایت Solution همراه با کد هم داره. همین باعث می‌شه برای کسایی که تازه دارن پایتون یاد می‌گیرن، یه منبع خیلی خوب برای تمرین عملی و تقویت مهارت برنامه‌نویسی باشه.

🐍 @python_rd
1
🔆 اعتبار سنجی تمیز داده ها در پایتون با Pydantic

🔹وقتی از کاربر داده می‌گیری، ممکنه مقدار اشتباه وارد بشه؛ مثلاً به‌جای عدد، متن بفرسته یا یه فیلد ضروری رو جا بندازه. Pydantic دقیقاً برای همین ساخته شده؛ داده‌ها رو قبل از ورود به برنامه چک می‌کنه و اگر مشکلی باشه سریع خطا می‌ده.

from pydantic import BaseModel, ValidationError

class User(BaseModel):
name: str
age: int

try:
user = User(name="Ali", age="twenty")
except ValidationError as e:
print(e)

🔹توی این مثال، چون age باید عدد باشه ولی متن وارد شده، Pydantic خطا می‌ده و جلوی ورود داده‌ی اشتباه رو می‌گیره. همین ویژگی باعث می‌شه توی FastAPI و پروژه‌های API خیلی پرکاربرد باشه.

🐍 @python_rd
👍3
🔆چرا dataclass یکی از تمیزترین امکانات پایتونه؟

اگه توی پایتون کلی کلاس ساده می‌نویسی که فقط برای نگه‌داشتن داده‌ان، dataclass کارت رو راحت می‌کنه.

قبل از dataclass باید برای هر کلاس، کلی کد تکراری می‌نوشتی:

init
repr
eq

ولی با dataclass همون کلاس رو خیلی تمیز و کوتاه می‌نویسی:
from dataclasses import dataclass

@dataclass
class User:
name: str
age: int

🔹 پایتون خودش برات سازنده، نمایش شیء و مقایسه رو می‌سازه.

چرا خوبه؟

کد کمتر
خوانایی بیشتر
خطای کمتر

🔹مناسب برای مدل‌های داده‌ای

اگر با کلاس‌هایی کار می‌کنی که فقط وظیفه‌شون نگهداری اطلاعاته، dataclass واقعاً یکی از بهترین انتخاب‌هاست.

🐍 @python_rd
6💯1
🔆 توی پایتون with دقیقا چیکار میکنه؟

🔹خیلی وقت‌ها ما با فایل، دیتابیس یا منابعی کار می‌کنیم که باید بعد از استفاده حتماً بسته یا آزاد بشن.
اینجا with به دردت میخوره.

مثلاً باز کردن فایل:

with open("data.txt", "r") as file:
content = file.read()

مزیتش چیه؟
- فایل بعد از تموم شدن کار، خودکار بسته می‌شه
- کد تمیزتر می‌شه
- احتمال فراموش کردن close() از بین می‌ره

مقایسه کن با این حالت:

file = open("data.txt", "r")
content = file.read()
file.close()

اینجا اگر وسط کار خطا رخ بده، ممکنه فایل بسته نشه.
ولی with این مشکل رو خیلی بهتر مدیریت می‌کنه.

پس هر وقت با منبعی کار می‌کنی که باید حتماً تمیز جمع بشه، with بهترین انتخابته.


🐍 @python_rd
👍42
🔆 توی کدنویسی خیلی وقت‌ها پیش میاد که می‌خوایم یه خطای احتمالی رو نادیده بگیریم و بدون دردسر ازش رد بشیم. مثلاً فرض کن می‌خوای یه فایل رو حذف کنی و برات مهم نیست که اون فایل از قبل وجود داره یا نه. راه سنتی و معمولی اینه که یه بلاک try-except بنویسی و توی بخش except بنویسی pass که ظاهر کد رو شلوغ و نامرتب می‌کنه.

🔹 اما پایتون یه ابزار فوق‌العاده تمیز برای این کار داره به اسم suppress که توی کتابخونه contextlib قرار داره. با استفاده از اون می‌تونی خیلی راحت بنویسی with suppress(FileNotFoundError) و بعد دستور حذف فایل رو اجرا کنی. با این کار اگه فایل وجود نداشته باشه، پایتون بدون اینکه برنامه رو کرش کنه یا نیاز به نوشتن بلاک‌های طولانی باشه، خیلی شیک از روش رد میشه. این ترفند کدت رو خلوت‌تر و خواناتر می‌کنه.

from contextlib import suppress
import os

# روش تمیز و پایتونیک بدون نیاز به try-except و pass
with suppress(FileNotFoundError):
os.remove("data.txt")

🐍 @pyrhon_rd
🔥21
🔆 پایتون رو اینجوری و پله پله شروع کن، سعی نکن یه شبه بری بالا:

1) Python Fundamentals
2) Variables & Data Types
3) Operators & Input/Output
4) Conditional Statements
5) Loops
6) Functions
7) Lists, Tuples, Sets, Dictionaries
8) File Handling
9) Exception Handling
10) OOP in Python
11) Modules & Packages
12) Git & GitHub
13) SQL & Databases
14) APIs & JSON
15) Web Framework: Flask / Django / FastAPI
16) Testing & Debugging
17) Data Structures & Algorithms
18) Deployment & Cloud Basics

🐍 @pyrhon_rd
❤‍🔥6👎1
🔆تو پایتون معمولا برای شرط‌گذاری چندتایی از or پشت سر هم استفاده می‌کنن، در حالی که in هم تمیزتره هم خواناتر.

مثلاً به جای این:
status = "pending"

if status == "pending" or status == "waiting" or status == "hold":
print("not ready")

اینو بنویس:
status = "pending"

if status in {"pending", "waiting", "hold"}:
print("not ready")

🔹وقتی تعداد شرط‌ها بیشتر میشه، این مدل هم کدت رو حرفه‌ای‌تر می‌کنه هم بعداً تغییر دادنش راحت‌تره.

🔹 برای چک کردن چند مقدار مشخص، in یکی از ساده‌ترین چیزهاس

🐍 @pyrhon_rd
4👍1
🔆خیلی وقتا توی جنگو فقط اسمِ کاربری رو لازم داریم، ولی اشتباهاً کلِ رکورد (با کلی فیلدِ سنگین) رو از دیتابیس می‌کشیم بیرون!

🔹مثلاً به جای این:
all_users = User.objects.all()
# واکشی تمامِ اطلاعات مثل بیوگرافی، آدرس، تاریخ تولد و…

🔹اینو بنویس:
usernames = User.objects.values_list(‘username’, flat=True)

🔹 متدِ values_list با flat=True فقط اون ستونی که می‌خوای رو میاره و دیتابیس رو بی‌خودی شلوغ نمی‌کنه.

🔹 وقتی دیتابیس‌ت میلیونی بشه، همین کوئری‌های بهینه هستن که سایتت رو سرپا نگه میدارن.

🐍 @pyrhon_rd
4
🔆فکر کن داری اطلاعاتِ ۵ تا سایت رو اسکرپ می‌کنی؛ اگه پشت سر هم بزنی، باید صبر کنی اولی تموم بشه تا دومی شروع شه. این یعنی اتلاف وقت!

🔹مثلاً به جای این:
for url in urls:

data = requests.get(url).json()
# اینجا برنامه تا گرفتن جواب قفل می‌کنه!

🔹اینو بنویس:
tasks = [fetch_data(url) for url in urls]

results = await asyncio.gather(*tasks)

🔹 با gather به پایتون می‌گی: «همه‌شون رو با هم استارت بزن و وقتی همه‌شون جواب دادن، نتیجه رو یکجا بهم تحویل بده».

🔹 توی کارهای شبکه‌ای، این تفاوت بینِ یک برنامه کند و یک سیستمِ فوق‌سریعِ مقیاس‌پذیره.

🐍 @pyrhon_rd
🔥4
🔆Hypermodern Python

🔹 برای کسایی که زبانشون خوبه!

فصل 1: Setup
فصل 2: Testing
فصل 3: Linting
فصل 4: Typing
فصل 5: Documentation
فصل 6: CI/CD

https://cjolowicz.github.io/posts/hypermodern-python-01-setup/

🐍 @python_rd
1
🔆 خداحافظی با دردسرهای datetime

🔹اگه در پایتون با کتابخانه استاندارد datetime کار کرده باشی، میدونی که مدیریت منطقه زمانی (Timezone)، فرمت‌دهی و محاسبات تاریخ بعضی وقتا تبدیل به دردسر بزرگی میشه!

🔹 راه حل: کتابخانه فوق‌العاده Pendulum

این کتابخونه تموم قابلیت‌های datetime رو داره، اما با سینتکس بسیار ساده‌تر و ابزارهای قدرتمندتر.

🔹چند مثال کاربردی:


🔹 دریافت زمان کنونی با مدیریت Timezone:
import pendulum

# دریافت زمان فعلی تهران
now_tehran = pendulum.now('Asia/Tehran')
print(now_tehran)

🔹 محاسبه و اضافه/کم کردن زمان (خوانا و ساده):
dt = pendulum.datetime(2026, 8, 2)

# اضافه کردن ۳ هفته و ۲ روز
future = dt.add(weeks=3, days=2)
print(future.to_date_string()) # 2026-08-25

🔹 نمایش تاریخ به زبان انسانی (Human-readable):
past_time = pendulum.now().subtract(hours=5)

# نمایش چقدر از اون زمان گذشته
print(past_time.diff_for_humans())
# خروجی: "5 hours ago"

🔹چرا Pendulum؟

جایگزین ۱۰۰٪ سازگار برای datetime

هندل کردن بسیار راحت‌تر و دقیق‌تر Timezoneها

محاسبه اختلاف دو تاریخ بدون کدنویسی پیچیده

🔹نصب:
pip install pendulum

🐍 @python_rd
👍3
🔆 خروجی کد چیه؟

x = [1, 2, 3]
y = x
y.append(4)

print(len(x))

🐍 @python_rd
🔆 لاگ‌گیریِ حرفه‌ای بدون دردسر با Loguru

🔹ماژول استاندارد logging او پایتون قدرتمنده، ولی کانفیگ کردن و تنظیمات اولیه اش پیچیده و زمان‌بره. کتابخانه Loguru اومده تا لاگ‌گیری رو به ساده‌تر کنه.
🛠 نصب کتابخانه:
pip install loguru

🔹مثال:
from loguru import logger

# فقط با همین یک خط خروجی رنگی و استاندارد بگیرید!
logger.info("سرور با موفقیت روشن شد.")
logger.warning("میزان مصرف RAM بالا رفته است!")

# ذخیره خودکار لاگ‌ها در فایل با قابلیت چرخش (Rotation)
logger.add("app_logs.log", rotation="10 MB") # هر وقت فایل ۱۰ مگابایت شد فایل جدید می‌سازد

@logger.catch # مدیریت خودکار استثناها و لاگ کردن کامل Traceback
def divide(a, b):
return a / b

# تست خطا
divide(10, 0)

🔹قابلیت‌های کلیدی:

صفر کانفیگ: بدون هیچ تنظیمات اولیه‌ای آماده استفاده اس.

خروجی رنگی و تمیز: شامل تاریخ، زمان دقیق، سطح لاگ (INFO, ERROR, ...)، اسم فایل و شماره خط.

مدیریت فایل لاگ: تنظیم آسون برای زیپ کردن، حذف لاگ‌های قدیمی و جداسازی حجم فایل‌ها.

دکوراتور @logger.catch: تمامی Exceptionها رو با جزئیات دقیق و بدون کرش کردن برنامه لاگ می‌کنه.

🐍 @pyrhon_rd
👍3