🔅 کد دانلود صفحه وب
📌 کاربرد: Scraping / گرفتن HTML یک سایت
🐍 @python_rd
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
🤖 رودمپ یادگیری ماشین با پایتون
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 خیلی کاربردیه.
✔️ نگهداشتن state بدون مشکلات همزمانی
🐍 @python_rd
🔅مدیریت state در async با ContextVar
در FastAPI و برنامههای async خیلی کاربردیه.
from contextvars import ContextVar
request_id = ContextVar("request_id", default=None)
✔️ نگهداشتن state بدون مشکلات همزمانی
🐍 @python_rd
🔸 ترفندهای پایتون
🔅بعد از try از else و finally غافل نشو
کد تمیزتر و منطقیتر:
✔️ در واقع else فقط وقتی اجرا میشود که ارور نباشد
✔️ اما finally همیشه اجرا میشود
🐍 @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
🔅 اندازه فایل یا فولدر رو با پایتون بگیر
🐍 @python_rd
import os
print(os.path.getsize("file.txt"), "bytes")
🐍 @python_rd
❤3
🔸 ترفندهای پایتون
🔅نکته DataClass برای کلاسهای تمیز
دیگه نیازی نیست init و repr بنویسی؛ خودش میسازه.
✔️ 70٪ کد کمتر
✔️ خوانایی بیشتر
🐍 @python_rd
🔅نکته DataClass برای کلاسهای تمیز
دیگه نیازی نیست init و repr بنویسی؛ خودش میسازه.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
✔️ 70٪ کد کمتر
✔️ خوانایی بیشتر
🐍 @python_rd
❤9
سلام بچه ها، حالتون چطوره؟
یکم از خودتون بگید، صحبت کنیم،
الان چیکار میکنید؟
چه مباحثی از پایتون رو کار کردید؟
تو چه مرحله ای هستید؟
به درآمد رسیدید یا هنوز تو مراحل یادگیری هستید؟
یکم از خودتون بگید، صحبت کنیم،
الان چیکار میکنید؟
چه مباحثی از پایتون رو کار کردید؟
تو چه مرحله ای هستید؟
به درآمد رسیدید یا هنوز تو مراحل یادگیری هستید؟
❤3
🔆کوتاه نویسی با پایتون:
Walrus Operator (:=)
🔸از نسخه ۳.۸ به بعد یه ابزار جدید به پایتون اضافه شد به اسم Walrus Operator.
باهاش میتونی همزمان *یه مقدار رو ذخیره کنی* و *از همون مقدار داخل شرط استفاده کنی*.
یعنی هم کدت کوتاهتر میشه، هم تمیزتر.
مثال ساده:
بدون walrus مجبور بودی اول name رو بگیری، بعد توی if چکش کنی.
اینجا همهچی یکجا و شیک انجام میشه. این قابلیت توی حلقهها واقعاً مفیده.
🐍 @python_rd
Walrus Operator (:=)
🔸از نسخه ۳.۸ به بعد یه ابزار جدید به پایتون اضافه شد به اسم Walrus Operator.
باهاش میتونی همزمان *یه مقدار رو ذخیره کنی* و *از همون مقدار داخل شرط استفاده کنی*.
یعنی هم کدت کوتاهتر میشه، هم تمیزتر.
مثال ساده:
if (name := input("Name: ")):
print("Hello", name)بدون walrus مجبور بودی اول name رو بگیری، بعد توی if چکش کنی.
اینجا همهچی یکجا و شیک انجام میشه. این قابلیت توی حلقهها واقعاً مفیده.
🐍 @python_rd
❤3👍3
🔆بهینهسازی مصرف RAM با slots
🔸بهصورت پیشفرض هر آبجکت پایتون یه دیکشنری داخلی داره که کلی جا میگیره.
اگه تعداد آبجکتها زیاد باشه، مصرف رم میره هوا.
اینجا
با تعریف اسلاتس، پایتون به کلاس میگه دقیقاً چه attribute هایی داری،
در نتیجه دیگه واسه هر شیء دیکشنری نمیسازه و مصرف حافظه تا حد زیادی کم میشه.
این تکنیک مخصوص وقتاییه که با هزاران آبجکت طرفی و پرفورمنس برات مهمه.
🐍 @python_rd
🔸بهصورت پیشفرض هر آبجکت پایتون یه دیکشنری داخلی داره که کلی جا میگیره.
اگه تعداد آبجکتها زیاد باشه، مصرف رم میره هوا.
اینجا
__slots__ به کارت میاد.با تعریف اسلاتس، پایتون به کلاس میگه دقیقاً چه attribute هایی داری،
در نتیجه دیگه واسه هر شیء دیکشنری نمیسازه و مصرف حافظه تا حد زیادی کم میشه.
class User:
__slots__ = ("name", "age")
def __init__(self, name, age):
self.name = name
self.age = age
این تکنیک مخصوص وقتاییه که با هزاران آبجکت طرفی و پرفورمنس برات مهمه.
🐍 @python_rd
❤2
🔆خروجی کد چیه؟
A)
🐍@python_rd
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 یا شرطها) بدون اینکه منطق کد رو بهم بزنی ازش استفاده کنی و با حذف کردنش، کدهات تمیز باقی میمونن.
مثال:
🐍 @python_rd
مثال:
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
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
This media is not supported in your browser
VIEW IN TELEGRAM
🔆الگوریتم Bellman-Ford
🔹یافتن سریع ترین راه از نقطه A به H
🐍 @python_rd
🔹یافتن سریع ترین راه از نقطه 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
🐍 @python_rd
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
🔆کدنویسی تمیز:
خیلی وقتها برای فیلتر کردن یه لیست، ناخودآگاه میریم سراغ حلقههای تو در تو و کدهای طولانی. فرض کن یه لیست از کاربرها داری و فقط میخوای اونهایی که فعال هستن و سنشون بالای ۱۸ ساله رو جدا کنی. کد معمولی و شلوغ این شکلی میشه:
اما توی پایتون میشه همین کار رو خیلی تمیزتر، خواناتر و سریعتر با List Comprehension انجام داد:
با این ترفند ساده هم خوانایی کد بالا میره و هم تعداد خطوط کمتر میشه.
🐍 @python_rd
خیلی وقتها برای فیلتر کردن یه لیست، ناخودآگاه میریم سراغ حلقههای تو در تو و کدهای طولانی. فرض کن یه لیست از کاربرها داری و فقط میخوای اونهایی که فعال هستن و سنشون بالای ۱۸ ساله رو جدا کنی. کد معمولی و شلوغ این شکلی میشه:
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
👍3❤1
🔆بهینهسازی کوئری در جنگو
یکی از بزرگترین دلایل کند شدن پروژههای جنگویی، اجرای کوئریهای تکراری روی دیتابیسه که بهش چالش N+1 میگن. فرض کن میخوای لیست کتابها و نام نویسنده هر کتاب رو نمایش بدی. اگر کد رو اینطوری بنویسی، جنگو برای هر کتاب یه کوئری جداگانه به جدول نویسندهها میزنه:
برای حل این مشکل کافیه از select_related استفاده کنی تا جنگو با یک Joint ساده در دیتابیس، همه اطلاعات رو یکجا بکشه بیرون و سرعت لود صفحه رو چند برابر کنه:
همیشه قبل از دیپلوی کردن پروژه، تعداد کوئریهاتون رو با Django Debug Toolbar چک کنید تا سرور زیر بار نره.
🐍 @python_rd
یکی از بزرگترین دلایل کند شدن پروژههای جنگویی، اجرای کوئریهای تکراری روی دیتابیسه که بهش چالش 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 در پایتون
🔹 برای کار با لیستهای خیلی بزرگ، استفاده از لیستکامپرهنشن معمولی باعث میشه تمام دادهها همزمان توی رم بارگذاری بشن که اصلاً بهینه نیست. با تغییر پرانتزها به براکت، میتونی از جنریتور استفاده کنی تا دادهها فقط موقع نیاز تولید بشن و مصرف حافظه برنامه به شدت کاهش پیدا کنه.
🐍 @python_rd
🔹 برای کار با لیستهای خیلی بزرگ، استفاده از لیستکامپرهنشن معمولی باعث میشه تمام دادهها همزمان توی رم بارگذاری بشن که اصلاً بهینه نیست. با تغییر پرانتزها به براکت، میتونی از جنریتور استفاده کنی تا دادهها فقط موقع نیاز تولید بشن و مصرف حافظه برنامه به شدت کاهش پیدا کنه.
# بد: مصرف حافظه بالا برای لیستهای حجیم
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 به محض پیدا کردن اولین مورد، متوقف میشه و سرعت اجرای برنامه رو به مراتب بالاتر میبره.
🐍 @python_rd
🔹 برای چک کردن وجود یک رکورد در دیتابیس، خیلیها از 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