🔆کوتاه نویسی با پایتون:
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
🔆کلاسهای پایتونی سبکتر با slots
🔹وقتی کلاسهای زیادی میسازی، پایتون برای هر نمونه یک دیکشنری اختصاصی ایجاد میکنه که کلی از رم سیستم رو بیدلیل اشغال میکنه. با تعریف slots توی کلاست، به پایتون دستور میدی که دیگه اون دیکشنری سنگین رو نسازه و فقط ویژگیهایی که نوشتی رو ذخیره کنه. این ترفند برای پروژههای بزرگ که با دیتای حجیم سروکار دارن، مثل یک معجزه برای کاهش مصرف رم عمل میکنه.
🐍 @python_rd
🔹وقتی کلاسهای زیادی میسازی، پایتون برای هر نمونه یک دیکشنری اختصاصی ایجاد میکنه که کلی از رم سیستم رو بیدلیل اشغال میکنه. با تعریف slots توی کلاست، به پایتون دستور میدی که دیگه اون دیکشنری سنگین رو نسازه و فقط ویژگیهایی که نوشتی رو ذخیره کنه. این ترفند برای پروژههای بزرگ که با دیتای حجیم سروکار دارن، مثل یک معجزه برای کاهش مصرف رم عمل میکنه.
class User:
slots = ['name', 'id']
def init(self, name, id):
self.name = name
self.id = id
🐍 @python_rd
🔥1
🔆 ترکیب دیکشنریها با عملگر |
احتمالا قبلا برای ادغام دو دیکشنری از متد update یا روشهای دیگه استفاده میکردی که کد رو شلوغ میکرد. حالا توی پایتون ۳.۹ به بعد، خیلی شیک میتونی با استفاده از عملگر پایپ یا همون | دو تا دیکشنری رو با هم ترکیب کنی. نتیجه یک دیکشنری جدیده که تمام محتویات قبلیها رو داره و خیلی هم سریعتر و خواناتر نوشته شده.
🐍 @python_rd
احتمالا قبلا برای ادغام دو دیکشنری از متد update یا روشهای دیگه استفاده میکردی که کد رو شلوغ میکرد. حالا توی پایتون ۳.۹ به بعد، خیلی شیک میتونی با استفاده از عملگر پایپ یا همون | دو تا دیکشنری رو با هم ترکیب کنی. نتیجه یک دیکشنری جدیده که تمام محتویات قبلیها رو داره و خیلی هم سریعتر و خواناتر نوشته شده.
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
merged = dict1 | dict2
print(merged)
# خروجی: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
🐍 @python_rd
🔆 ۸ سایت رایگان برای تمرین پایتون
🔸 Practice Python:
تمرینهای ساده با پاسخ؛ عالی برای شروع.
🔸PyNative:
کوییز و تمرینهای مرحلهای + اجرای آنلاین.
🔸PyChallenger:
درسهای کوتاه + تمرین داخل مرورگر.
🔸LabEx:
تمرین تعاملی و سناریو محور برای مهارتسازی.
🔸Learn2Code:
تمرینهای سریع بدون نیاز به ثبتنام.
🔸Codewars:
چالشهای الگوریتمی (Kata) سطحبندیشده.
🔸HackerRank:
حل مسئله و آمادگی مصاحبه فنی.
🔸Project Euler:
مسائل ریاضی/محاسباتی برای سطح پیشرفته.
🐍 @python_rd
🔸 Practice Python:
تمرینهای ساده با پاسخ؛ عالی برای شروع.
🔸PyNative:
کوییز و تمرینهای مرحلهای + اجرای آنلاین.
🔸PyChallenger:
درسهای کوتاه + تمرین داخل مرورگر.
🔸LabEx:
تمرین تعاملی و سناریو محور برای مهارتسازی.
🔸Learn2Code:
تمرینهای سریع بدون نیاز به ثبتنام.
🔸Codewars:
چالشهای الگوریتمی (Kata) سطحبندیشده.
🔸HackerRank:
حل مسئله و آمادگی مصاحبه فنی.
🔸Project Euler:
مسائل ریاضی/محاسباتی برای سطح پیشرفته.
🐍 @python_rd
❤1
🔆 با پایتون چی میشه ساخت؟
پایتون فقط یک زبان برنامهنویسی نیست؛ یک جعبهابزار کامل برای ساخت تقریباً هر چیزیه! 🚀
🔹Pandas
برای تحلیل دادهها استفاده میشه.
🔹Scikit-learn
برای پیادهسازی یادگیری ماشین کاربرد داره.
🔹PyTorch
برای یادگیری عمیق و مدلهای هوش مصنوعی عالیه.
🔹TensorFlow
برای ساخت و توسعه مدلهای هوش مصنوعی استفاده میشه.
🔹Django
برای توسعه وبسایتهای حرفهای استفاده میشه.
🔹Flask
برای توسعه وبسایتهای سبک و سریع کاربرد داره.
🔹FastAPI
برای ساخت سریع API مورد استفاده قرار میگیره.
🔹NumPy
برای انجام محاسبات عددی پیچیده استفاده میشه.
🔹Matplotlib
برای مصورسازی دادهها و رسم نمودارها کاربرد داره.
🔹Beautiful Soup
برای وباسکرپینگ و جمعآوری اطلاعات از سایتها استفاده میشه.
🔹OpenCV
برای پردازش تصویر و بینایی ماشین استفاده میشه.
🔹NLTK
برای پردازش زبان طبیعی و متن کاربرد داره.
🔹Streamlit
برای ساخت سریع اپلیکیشنهای هوش مصنوعی استفاده میشه.
🔹Airflow
برای خودکارسازی و مدیریت فرایندها کاربرد داره.
🔹Apache Spark
برای پردازش کلانداده (Big Data) استفاده میشه.
🔹Kivy
برای ساخت اپلیکیشنهای دسکتاپ و موبایل کاربرد داره.
🔹AWS Boto3
برای اتوماسیون و مدیریت خدمات ابری AWS استفاده میشه.
🔹LangChain
برای ساخت ایجنتها و مدلهای هوش مصنوعی پیچیده کاربرد داره.
🔹Selenium
برای اتوماسیون فعالیتهای وب استفاده میشه.
🐍 @python_rd
پایتون فقط یک زبان برنامهنویسی نیست؛ یک جعبهابزار کامل برای ساخت تقریباً هر چیزیه! 🚀
🔹Pandas
برای تحلیل دادهها استفاده میشه.
🔹Scikit-learn
برای پیادهسازی یادگیری ماشین کاربرد داره.
🔹PyTorch
برای یادگیری عمیق و مدلهای هوش مصنوعی عالیه.
🔹TensorFlow
برای ساخت و توسعه مدلهای هوش مصنوعی استفاده میشه.
🔹Django
برای توسعه وبسایتهای حرفهای استفاده میشه.
🔹Flask
برای توسعه وبسایتهای سبک و سریع کاربرد داره.
🔹FastAPI
برای ساخت سریع API مورد استفاده قرار میگیره.
🔹NumPy
برای انجام محاسبات عددی پیچیده استفاده میشه.
🔹Matplotlib
برای مصورسازی دادهها و رسم نمودارها کاربرد داره.
🔹Beautiful Soup
برای وباسکرپینگ و جمعآوری اطلاعات از سایتها استفاده میشه.
🔹OpenCV
برای پردازش تصویر و بینایی ماشین استفاده میشه.
🔹NLTK
برای پردازش زبان طبیعی و متن کاربرد داره.
🔹Streamlit
برای ساخت سریع اپلیکیشنهای هوش مصنوعی استفاده میشه.
🔹Airflow
برای خودکارسازی و مدیریت فرایندها کاربرد داره.
🔹Apache Spark
برای پردازش کلانداده (Big Data) استفاده میشه.
🔹Kivy
برای ساخت اپلیکیشنهای دسکتاپ و موبایل کاربرد داره.
🔹AWS Boto3
برای اتوماسیون و مدیریت خدمات ابری AWS استفاده میشه.
🔹LangChain
برای ساخت ایجنتها و مدلهای هوش مصنوعی پیچیده کاربرد داره.
🔹Selenium
برای اتوماسیون فعالیتهای وب استفاده میشه.
🐍 @python_rd
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
🔆 Insertion Sort
🔹 الگوریتم از عنصر دوم شروع میکنه، هر بار یک عدد رو بهعنوان key برمیداره، اعداد بزرگترِ بخش مرتبشده رو یک خانه به راست شیفت میده و key رو توی جای درستش قرار میده. این کار تا آخر آرایه ادامه پیدا میکنه تا کل لیست مرتب بشه.
کد:
🐍 @python_rd
🔹 الگوریتم از عنصر دوم شروع میکنه، هر بار یک عدد رو بهعنوان key برمیداره، اعداد بزرگترِ بخش مرتبشده رو یک خانه به راست شیفت میده و key رو توی جای درستش قرار میده. این کار تا آخر آرایه ادامه پیدا میکنه تا کل لیست مرتب بشه.
کد:
def insertion_sort(a):
n = len(a)
for i in range(1, n):
key = a[i]
j = i - 1
while j > 0 and a[j - 1] > key:
a[j] = a[j - 1]
j -= 1
a[j] = key
🐍 @python_rd
❤3