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

■ گروه پایتون:
@programmers_py
Download Telegram
🔅 کد دانلود صفحه وب

import requests

url = "https://example.com"
response = requests.get(url)

print(response.text[:500]) # نمایش 500 کاراکتر اول


📌 کاربرد: Scraping / گرفتن HTML یک سایت


🐍 @python_rd
🔸 مسیر Machine Learning با پایتون
🤖 رودمپ یادگیری ماشین با پایتون

1) پایتون علمی
NumPy، Pandas، Matplotlib، Scikit-learn.

2) ریاضیات لازم
مشتق، ماتریس، وکتور، جبرخطی، آمار.

3) الگوریتم‌های ML
Regression، SVM، Decision Tree، RandomForest، KMeans.

4) مدل‌سازی و ارزیابی
Train/Test، Cross Validation، Metrics مثل F1، ROC.

5) یادگیری عمیق
PyTorch یا TensorFlow → CNN، RNN، Transformers.

6) و MLOps ساده
Model Serving، FastAPI، Docker.

7) مهندسی داده مقدماتی
ETL، Pipelines، Feature Store.

8) پروژه‌ها
طبقه‌بندی تصاویر، تحلیل متن، پیش‌بینی سری زمانی.


🐍 @python_rd
👍2
🔸 ترفندهای پایتون

🔅مدیریت state در async با ContextVar

در FastAPI و برنامه‌های async خیلی کاربردیه.


from contextvars import ContextVar

request_id = ContextVar("request_id", default=None)



✔️ نگه‌داشتن state بدون مشکلات همزمانی


🐍 @python_rd
🔸 ترفندهای پایتون

🔅بعد از try از else و finally غافل نشو

کد تمیزتر و منطقی‌تر:


try:
x = 10 / num
except ZeroDivisionError:
print("Cannot divide by zero!")
else:
print("No error, result:", x)
finally:
print("Finished")


✔️ در واقع else فقط وقتی اجرا می‌شود که ارور نباشد
✔️ اما finally همیشه اجرا می‌شود



🐍 @python_rd
🔅 اندازه فایل یا فولدر رو با پایتون بگیر


import os

print(os.path.getsize("file.txt"), "bytes")




🐍 @python_rd
3
🔸 ترفندهای پایتون

🔅نکته DataClass برای کلاس‌های تمیز

دیگه نیازی نیست init و repr بنویسی؛ خودش می‌سازه.

from dataclasses import dataclass

@dataclass
class User:
name: str
age: int



✔️ 70٪ کد کمتر
✔️ خوانایی بیشتر


🐍 @python_rd
9
🔸 زندگی کوتاهه، از پایتون استفاده کن!


🐍 @python_rd
9👍3
سلام بچه ها، حالتون چطوره؟
یکم از خودتون بگید، صحبت کنیم،
الان چیکار میکنید؟
چه مباحثی از پایتون رو کار کردید؟
تو چه مرحله ای هستید؟
به درآمد رسیدید یا هنوز تو مراحل یادگیری هستید؟
3
🔆کوتاه نویسی با پایتون:
Walrus Operator (:=)

🔸از نسخه ۳.۸ به بعد یه ابزار جدید به پایتون اضافه شد به اسم Walrus Operator.
باهاش می‌تونی هم‌زمان *یه مقدار رو ذخیره کنی* و *از همون مقدار داخل شرط استفاده کنی*.
یعنی هم کدت کوتاه‌تر می‌شه، هم تمیزتر.

مثال ساده:
if (name := input("Name: ")):
print("Hello", name)

بدون walrus مجبور بودی اول name رو بگیری، بعد توی if چکش کنی.
اینجا همه‌چی یک‌جا و شیک انجام می‌شه. این قابلیت توی حلقه‌ها واقعاً مفیده.

🐍 @python_rd
3👍3
🔆بهینه‌سازی مصرف RAM با slots

🔸به
‌صورت پیش‌فرض هر آبجکت پایتون یه دیکشنری داخلی داره که کلی جا می‌گیره. 
اگه تعداد آبجکت‌ها زیاد باشه، مصرف رم می‌ره هوا. 
اینجا __slots__ به کارت میاد.

با تعریف اسلاتس، پایتون به کلاس می‌گه دقیقاً چه attribute هایی داری، 
در نتیجه دیگه واسه هر شیء دیکشنری نمی‌سازه و مصرف حافظه تا حد زیادی کم می‌شه.

class User:
    __slots__ = ("name", "age")
    def __init__(self, name, age):
        self.name = name
        self.age = age


این تکنیک مخصوص وقتاییه که با هزاران آبجکت طرفی و پرفورمنس برات مهمه.

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

numbers = [2, 4, 6, 8]

result = []
for n in numbers:
    if n == 4 or 10:
        result.append(n)

print(result)

A) [4] 

B) [2, 4, 6, 8] 

C) [2, 4] 

D) [4, 6, 8]


🐍@python_rd
6👍2
🔆یه ترفند خیلی کاربردی برای دیباگ کردن در پایتون، استفاده از icecream به جای پرینت‌های ساده‌ست. به جای اینکه هی بنویسی print(f'x: {x}') و سعی کنی بفهمی چی به چیه، کافیه کتابخونه‌ش رو نصب کنی و از ic() استفاده کنی. این ابزار خودش اسم متغیر، مقدارش و حتی شماره خطی که توش اجرا شده رو خیلی تمیز و رنگی چاپ می‌کنه. علاوه بر این، چون خودش مقدار رو برمی‌گردونه، می‌تونی مستقیم وسط کد (حتی داخل return یا شرط‌ها) بدون اینکه منطق کد رو بهم بزنی ازش استفاده کنی و با حذف کردنش، کدهات تمیز باقی می‌مونن.

مثال:

from icecream import ic

def add(x, y):
return x + y

# به جای این:
# print(f"DEBUG: add(1, 2) = {add(1, 2)}")

# از این استفاده کن:
ic(add(1, 2))

🐍 @python_rd
👍2
🔆python list methods:


1. 🍔🍔🍟 .append(🍔) → 🍔🍔🍟🍔

2. 🍔🍔🍟 .count(🍔) → 2

3. 🍔🍔🍟 .copy() → 🍔🍔🍟

4. 🍔🍔🍟 .index(🍟) → 2

5. 🍔🍔🍟 .reverse() → 🍟🍔🍔

6. 🍔🍔🍟 .remove(🍟) → 🍔🍔

7. 🍔🍔🍟 insert( 1, 🥤) → 🍔🥤🍔🍟

8. 🍔🍔🍟 pop(1) → 🍔🍟

9. 🍔🍔🍟 pop() → 🍔🍔

🐍 @python_rd
18😁2👏1
خروجی کد چیه؟

x = 5 print( x + "5")
Anonymous Quiz
33%
55
9%
10
3%
5
54%
هیچکدام (error)
This media is not supported in your browser
VIEW IN TELEGRAM
🔆الگوریتم Bellman-Ford

🔹یافتن سریع ترین راه از نقطه A به H

def bellman_ford(nodes, edges, start, target):
dist = {n: float('inf') for n in nodes}
dist[start] = 0
for _ in range(len(nodes) - 1):
updated = False
for u, v, w in edges:
if dist[u] + w < dist[v]:
dist[v] = dist[u] + w
updated = True
if not updated: break

🐍 @python_rd
5
This media is not supported in your browser
VIEW IN TELEGRAM
🔆 الگوریتم Merge Sort

def merge_sort(arr, l, r):
if l < r:
mid = (l + r) // 2
merge_sort(arr, l, mid)
merge_sort(arr, mid + 1, r)
merge(arr, l, mid, r)

🐍 @python_rd
3
🔆کدنویسی تمیز:

خیلی وقت‌ها برای فیلتر کردن یه لیست، ناخودآگاه می‌ریم سراغ حلقه‌های تو در تو و کدهای طولانی. فرض کن یه لیست از کاربرها داری و فقط می‌خوای اون‌هایی که فعال هستن و سنشون بالای ۱۸ ساله رو جدا کنی. کد معمولی و شلوغ این شکلی می‌شه:
active_adults = []
for user in users:
if user['is_active'] == True:
if user['age'] > 18:
active_adults.append(user)

اما توی پایتون می‌شه همین کار رو خیلی تمیزتر، خواناتر و سریع‌تر با List Comprehension انجام داد:
active_adults = [u for u in users if u['is_active'] and u['age'] > 18]

با این ترفند ساده هم خوانایی کد بالا می‌ره و هم تعداد خطوط کمتر می‌شه.

🐍 @python_rd
👍31
🔆بهینه‌سازی کوئری در جنگو

یکی از بزرگ‌ترین دلایل کند شدن پروژه‌های جنگویی، اجرای کوئری‌های تکراری روی دیتابیسه که بهش چالش N+1 می‌گن. فرض کن می‌خوای لیست کتاب‌ها و نام نویسنده هر کتاب رو نمایش بدی. اگر کد رو این‌طوری بنویسی، جنگو برای هر کتاب یه کوئری جداگانه به جدول نویسنده‌ها می‌زنه:
books = Book.objects.all()
for book in books:
print(book.author.name) # اجرای یک کوئری اضافه به ازای هر کتاب!

برای حل این مشکل کافیه از select_related استفاده کنی تا جنگو با یک Joint ساده در دیتابیس، همه اطلاعات رو یک‌جا بکشه بیرون و سرعت لود صفحه رو چند برابر کنه:
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # بدون کوئری اضافه

همیشه قبل از دیپلوی کردن پروژه، تعداد کوئری‌هاتون رو با Django Debug Toolbar چک کنید تا سرور زیر بار نره.

🐍 @python_rd
👍2
🔆 مدیریت حافظه با استفاده از Generator در پایتون

🔹 برای کار با لیست‌های خیلی بزرگ، استفاده از لیست‌کامپرهنشن معمولی باعث می‌شه تمام داده‌ها همزمان توی رم بارگذاری بشن که اصلاً بهینه نیست. با تغییر پرانتزها به براکت، می‌تونی از جنریتور استفاده کنی تا داده‌ها فقط موقع نیاز تولید بشن و مصرف حافظه برنامه به شدت کاهش پیدا کنه.

# بد: مصرف حافظه بالا برای لیست‌های حجیم
my_list = [x**2 for x in range(1000000)]

# خوب: مصرف حافظه ناچیز به صورت Lazy
my_gen = (x**2 for x in range(1000000))

🐍 @python_rd
3🔥1
🔆 تفاوت exists و count در کوئری‌ست‌های جنگو

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

# بد: بررسی کل جدول با count
if User.objects.filter(username="ali").count() > 0:
print("User exists")

# خوب: توقف بلافاصله بعد از پیدا کردن مورد با exists
if User.objects.filter(username="ali").exists():
print("User exists")

🐍 @python_rd
3
This media is not supported in your browser
VIEW IN TELEGRAM
🔆 کدشو توی کامنتا واست گذاشتم👌

🐍 @python_rd
3🔥2