🔆تو پایتون معمولا برای شرطگذاری چندتایی از
مثلاً به جای این:
اینو بنویس:
🔹وقتی تعداد شرطها بیشتر میشه، این مدل هم کدت رو حرفهایتر میکنه هم بعداً تغییر دادنش راحتتره.
🔹 برای چک کردن چند مقدار مشخص،
🐍 @pyrhon_rd
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
🔆خیلی وقتا توی جنگو فقط اسمِ کاربری رو لازم داریم، ولی اشتباهاً کلِ رکورد (با کلی فیلدِ سنگین) رو از دیتابیس میکشیم بیرون!
🔹مثلاً به جای این:
🔹اینو بنویس:
🔹 متدِ values_list با flat=True فقط اون ستونی که میخوای رو میاره و دیتابیس رو بیخودی شلوغ نمیکنه.
🔹 وقتی دیتابیست میلیونی بشه، همین کوئریهای بهینه هستن که سایتت رو سرپا نگه میدارن.
🐍 @pyrhon_rd
🔹مثلاً به جای این:
all_users = User.objects.all()
# واکشی تمامِ اطلاعات مثل بیوگرافی، آدرس، تاریخ تولد و…
🔹اینو بنویس:
usernames = User.objects.values_list(‘username’, flat=True)
🔹 متدِ values_list با flat=True فقط اون ستونی که میخوای رو میاره و دیتابیس رو بیخودی شلوغ نمیکنه.
🔹 وقتی دیتابیست میلیونی بشه، همین کوئریهای بهینه هستن که سایتت رو سرپا نگه میدارن.
🐍 @pyrhon_rd
❤4
🔆فکر کن داری اطلاعاتِ ۵ تا سایت رو اسکرپ میکنی؛ اگه پشت سر هم بزنی، باید صبر کنی اولی تموم بشه تا دومی شروع شه. این یعنی اتلاف وقت!
🔹مثلاً به جای این:
🔹اینو بنویس:
🔹 با gather به پایتون میگی: «همهشون رو با هم استارت بزن و وقتی همهشون جواب دادن، نتیجه رو یکجا بهم تحویل بده».
🔹 توی کارهای شبکهای، این تفاوت بینِ یک برنامه کند و یک سیستمِ فوقسریعِ مقیاسپذیره.
🐍 @pyrhon_rd
🔹مثلاً به جای این:
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: Setup
فصل 2: Testing
فصل 3: Linting
فصل 4: Typing
فصل 5: Documentation
فصل 6: CI/CD
https://cjolowicz.github.io/posts/hypermodern-python-01-setup/
🐍 @python_rd
Claudiojolowicz
Hypermodern Python
A guide to modern Python tooling with a focus on simplicity and minimalism.
❤1
🔆 خداحافظی با دردسرهای datetime
🔹اگه در پایتون با کتابخانه استاندارد datetime کار کرده باشی، میدونی که مدیریت منطقه زمانی (Timezone)، فرمتدهی و محاسبات تاریخ بعضی وقتا تبدیل به دردسر بزرگی میشه!
🔹 راه حل: کتابخانه فوقالعاده Pendulum
این کتابخونه تموم قابلیتهای datetime رو داره، اما با سینتکس بسیار سادهتر و ابزارهای قدرتمندتر.
🔹چند مثال کاربردی:
🔹 دریافت زمان کنونی با مدیریت Timezone:
🔹 محاسبه و اضافه/کم کردن زمان (خوانا و ساده):
🔹 نمایش تاریخ به زبان انسانی (Human-readable):
🔹چرا Pendulum؟
جایگزین ۱۰۰٪ سازگار برای datetime
هندل کردن بسیار راحتتر و دقیقتر Timezoneها
محاسبه اختلاف دو تاریخ بدون کدنویسی پیچیده
🔹نصب:
🐍 @python_rd
🔹اگه در پایتون با کتابخانه استاندارد 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
🔆 لاگگیریِ حرفهای بدون دردسر با Loguru
🔹ماژول استاندارد logging او پایتون قدرتمنده، ولی کانفیگ کردن و تنظیمات اولیه اش پیچیده و زمانبره. کتابخانه Loguru اومده تا لاگگیری رو به سادهتر کنه.
🛠 نصب کتابخانه:
🔹مثال:
🔹قابلیتهای کلیدی:
صفر کانفیگ: بدون هیچ تنظیمات اولیهای آماده استفاده اس.
خروجی رنگی و تمیز: شامل تاریخ، زمان دقیق، سطح لاگ (INFO, ERROR, ...)، اسم فایل و شماره خط.
مدیریت فایل لاگ: تنظیم آسون برای زیپ کردن، حذف لاگهای قدیمی و جداسازی حجم فایلها.
دکوراتور @logger.catch: تمامی Exceptionها رو با جزئیات دقیق و بدون کرش کردن برنامه لاگ میکنه.
🐍 @pyrhon_rd
🔹ماژول استاندارد 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
🔆 اعدادی که تو پایتون هیچوقت پاک نمیشن!
🔹 میدونستی پایتون یه کلوپ اختصاصی برای اعدادی داره که هیچوقت از حافظه RAM پاک نمیشن؟
🔹تو پایتون، تکنیکی به نام Integer Caching یا Small Integer Optimization وجود داره.
🔹 یعنی چی؟
وقتی پایتون بالا میاد، اعدادی از -5 تا 256 رو مپ میکنه و به صورت ثابت تو RAM نگه میداره. هر وقت او کدتون از این اعداد استفاده کنید، پایتون متغیر جدیدی تو حافظه نمیسازه، بلکه اشارهگر رو روی همون اعدادی که از قبل تو RAM ساخته برمیگردونه!
🔹 این کد رو ببینید:
🔹 چرا پایتون این کار رو میکنه؟
چون اعداد -5 تا 256 پرکاربردترین اعداد در محاسبات و حلقهها (مثل range) هستن. با این تریک کوچولو، پایتون از ساخت و نابودی مداوم این اعداد تو حافظه جلوگیری میکنه و سرعت برنامهها رو به شدت بالا میبره.
🔹 نکته: عملگر is آدرس حافظه دو متغیر رو مقایسه میکنه، نه مقدارشون رو!
🐍 @python_rd
🔹 میدونستی پایتون یه کلوپ اختصاصی برای اعدادی داره که هیچوقت از حافظه RAM پاک نمیشن؟
🔹تو پایتون، تکنیکی به نام Integer Caching یا Small Integer Optimization وجود داره.
🔹 یعنی چی؟
وقتی پایتون بالا میاد، اعدادی از -5 تا 256 رو مپ میکنه و به صورت ثابت تو RAM نگه میداره. هر وقت او کدتون از این اعداد استفاده کنید، پایتون متغیر جدیدی تو حافظه نمیسازه، بلکه اشارهگر رو روی همون اعدادی که از قبل تو RAM ساخته برمیگردونه!
🔹 این کد رو ببینید:
# اعدادی که در کلوپ اختصاصی هستن:
a = 100
b = 100
print(a is b) # Output: True (هر دو دقیقاً یک خونه حافظه هستن!)
# اعدادی که خارج از کلوپ هستن:
x = 300
y = 300
print(x is y) # Output: False (دو خانه حافظه کاملاً مجزا!)
🔹 چرا پایتون این کار رو میکنه؟
چون اعداد -5 تا 256 پرکاربردترین اعداد در محاسبات و حلقهها (مثل range) هستن. با این تریک کوچولو، پایتون از ساخت و نابودی مداوم این اعداد تو حافظه جلوگیری میکنه و سرعت برنامهها رو به شدت بالا میبره.
🔹 نکته: عملگر is آدرس حافظه دو متغیر رو مقایسه میکنه، نه مقدارشون رو!
🐍 @python_rd
❤3
🔆 ترفند تمیز: مقداردهی خودکار دیکشنری با defaultdict
🔹تا حالا شده بخوای توی یک دیکشنری بستهبندی یا گروهبندی انجام بدی و هی مجبور باشی وجود کلید رو بررسی کنی؟
🔹 روش پردردسر:
🔹 روش حرفهای با defaultdict:
🔹کاربرد: موقع کار با دادهها، لاگها یا ساخت ساختارهای پیچیده، کلی از شلوغی کُدت کم میکنه.
🐍 @python_rd
🔹تا حالا شده بخوای توی یک دیکشنری بستهبندی یا گروهبندی انجام بدی و هی مجبور باشی وجود کلید رو بررسی کنی؟
🔹 روش پردردسر:
data = {}
# اگر کلید نباشه، خطای KeyError میده!
if "fruits" not in data:
data["fruits"] = []
data["fruits"].append("apple")🔹 روش حرفهای با defaultdict:
from collections import defaultdict
# مشخص میکنیم مقدار پیشفرض یک لیست خالی باشه
data = defaultdict(list)
# بدون هیچ بررسی، مستقیم اضافه کن!
data["fruits"].append("apple")
print(data) # defaultdict(<class 'list'>, {'fruits': ['apple']})
🔹کاربرد: موقع کار با دادهها، لاگها یا ساخت ساختارهای پیچیده، کلی از شلوغی کُدت کم میکنه.
🐍 @python_rd
🔥2
🔆 مشاهده رمز های ذخیره شده شبکه های وای فای در ویندوز.
🔹 کد:
🔹 خروجی:
🔹 این اسکریپت از دستور netsh ویندوز استفاده میکنه؛ یعنی خودش رمز رو هک نمیکنه فقط اطلاعاتی رو نمایش میده که قبلاً روی همون سیستم ذخیره شده و کاربر بهش دسترسی داره
🔹نحوه اجرا
1. این کد فقط روی Windows اجرا میشه.
2. باید 3 Python روی سیستم نصب باشه.
3. کد رو داخل یک فایل با پسوند py ذخیره کن.
4. از طریق CMD یا PowerShell اجراش کن
python filename.py
5. بعد از اجرا شماره شبکه مورد نظر رو وارد کن تا اطلاعات اون نمایش داده بشه.
🐍 @python_rd
🔹 کد:
import subprocess
profiles = subprocess.check_output(
"netsh wlan show profiles", shell=True
).decode()
names []
for line in profiles.split("\n"):
if "All User Profile" in line:
names.append(line.split(":")[1].strip())
for i, name in enumerate (names, 1):
print(f"[{i}] {name}")
choice = int(input("\nChoose WiFi number: "))
result = subprocess.check_output(
f'netsh wlan show profile "{names [choice-1]}" key=clear', shell=True
).decode()
print("\n" + result)
🔹 خروجی:
HomeLab_24
StudioMesh_5G
AthenaGuest
Workstation_AP
NovaPhoneHotspot
GreenRouter_2.4G
BlueFiber_5G
🔹 این اسکریپت از دستور netsh ویندوز استفاده میکنه؛ یعنی خودش رمز رو هک نمیکنه فقط اطلاعاتی رو نمایش میده که قبلاً روی همون سیستم ذخیره شده و کاربر بهش دسترسی داره
🔹نحوه اجرا
1. این کد فقط روی Windows اجرا میشه.
2. باید 3 Python روی سیستم نصب باشه.
3. کد رو داخل یک فایل با پسوند py ذخیره کن.
4. از طریق CMD یا PowerShell اجراش کن
python filename.py
5. بعد از اجرا شماره شبکه مورد نظر رو وارد کن تا اطلاعات اون نمایش داده بشه.
🐍 @python_rd
🔥1
🔆 یه کتابخانه کاربردی برای ساختارمند کردن لاگها تو پایتون که باعث میشه لاگها بهصورت JSON و قابل پردازش باشن و راحتتر به ابزارهایی مثل Grafana یا ELK ارسال و تحلیل شن.
https://www.structlog.org
🐍 @python_rd
https://www.structlog.org
🐍 @python_rd
👍1
🔥1
PyCoders (پایتون)
🔆 تست! 🔸 خروجی چیه؟ x = 256 y = 256 print(x is y) m = 257 n = 257 print(m is n) 🐍 @pyrhon_rd
میبینم که پستای کانالو مطالعه نمیکنین
PyCoders (پایتون)
🔆 اعدادی که تو پایتون هیچوقت پاک نمیشن! 🔹 میدونستی پایتون یه کلوپ اختصاصی برای اعدادی داره که هیچوقت از حافظه RAM پاک نمیشن؟ 🔹تو پایتون، تکنیکی به نام Integer Caching یا Small Integer Optimization وجود داره. 🔹 یعنی چی؟ وقتی پایتون بالا میاد، اعدادی…
این پستو مطالعه کنید و دوباره به تست جواب بدید
🔆 چطوری مثل یه پایتونکار حرفهای کد بزنم؟
🔹 خیلی وقتها میخوایم مقداری رو از یک دیکشنری بگیریم، اما اگه کلید وجود نداشته باشه برنامهمون با KeyError کرش میکنه.
❌ روش مبتدی:
❌ روش مبتدی دیگه:
✅ روش حرفهای:
🔹 چرا این روش عالیه؟
متد .get() کلید رو سرچ میکنه؛ اگه بود مقدارش رو میده، اگه نبود بدون هیچ خطایی اون مقدار پیشفرض (اینجا 18) رو برمیگردونه!
🐍 @python_rd
🔹 خیلی وقتها میخوایم مقداری رو از یک دیکشنری بگیریم، اما اگه کلید وجود نداشته باشه برنامهمون با KeyError کرش میکنه.
❌ روش مبتدی:
user = {"name": "Ali", "role": "admin"}
if "age" in user:
age = user["age"]
else:
age = 18❌ روش مبتدی دیگه:
try:
age = user["age"]
except KeyError:
age = 18
✅ روش حرفهای:
age = user.get("age", 18)🔹 چرا این روش عالیه؟
متد .get() کلید رو سرچ میکنه؛ اگه بود مقدارش رو میده، اگه نبود بدون هیچ خطایی اون مقدار پیشفرض (اینجا 18) رو برمیگردونه!
🐍 @python_rd
❤9🔥1
🔆مستندی که درمورد یکی از محبوب ترین زبانهای دنیا یعنی پایتون ساخته شده و دیدنش کاملا پیشنهاد میشه.
🔹https://www.youtube.com/watch?v=GfH4QL4VqJ0
🐍 @python_rd
🔹https://www.youtube.com/watch?v=GfH4QL4VqJ0
🐍 @python_rd
🔆اگه میخواید با عمیقترین و عجیبترین رفتارهای پایتون آشنا شید حتما این ریپو رو چک کنین.
🔹https://github.com/pablogsal/python-horror-show
🐍 @python_rd
🔹https://github.com/pablogsal/python-horror-show
🐍 @python_rd
❤1
🔆 آشنایی با عملگر والروس (:=)
🔹عملگر := (که به خاطر شباهتش به چشمان و عاجهای والروس، Walrus Operator نامیده میشه) از پایتون ۳.۸ معرفی شد. کار اصلیش اینه که به شما اجازه میده همزمان با مقداردهی متغیر، از اون استفاده هم بکنید (Assignment Expressions).
🔹این کار باعث میشه کد شما کوتاهتر، خواناتر و بهینهتر بشه.
🔹 کد بدون Walrus Operator (روش قدیمی):
🔹 کد با Walrus Operator (روش حرفهای):
🔹 یک کاربرد واقعی و عالی در حلقه while:
فرض کنید میخواهید ورودی کاربر را تا زمان نوشتن کلمه exit دریافت کنید:
🔹 چه زمانی استفاده کنیم؟
* وقتی میخواید از محاسبه مجدد یک مقدار سنگین جلوگیری کنید.
* وقتی میخواید کدهای تکراری در شرطهای if و حلقههای while رو کاهش بدی.
🐍 @python_rd
🔹عملگر := (که به خاطر شباهتش به چشمان و عاجهای والروس، Walrus Operator نامیده میشه) از پایتون ۳.۸ معرفی شد. کار اصلیش اینه که به شما اجازه میده همزمان با مقداردهی متغیر، از اون استفاده هم بکنید (Assignment Expressions).
🔹این کار باعث میشه کد شما کوتاهتر، خواناتر و بهینهتر بشه.
🔹 کد بدون Walrus Operator (روش قدیمی):
data = [1, 2, 3, 4, 5]
n = len(data)
if n > 3:
print(f"تعداد عناصر زیاد است: {n}")
🔹 کد با Walrus Operator (روش حرفهای):
data = [1, 2, 3, 4, 5]
# تعریف متغیر n دقیقاً داخل شرط if!
if (n := len(data)) > 3:
print(f"تعداد عناصر زیاد است: {n}")
🔹 یک کاربرد واقعی و عالی در حلقه while:
فرض کنید میخواهید ورودی کاربر را تا زمان نوشتن کلمه exit دریافت کنید:
# روش تمیز و مدرن با Walrus
while (user_input := input("یک کلمه وارد کنید: ")) != "exit":
print(f"شما وارد کردید: {user_input}")
🔹 چه زمانی استفاده کنیم؟
* وقتی میخواید از محاسبه مجدد یک مقدار سنگین جلوگیری کنید.
* وقتی میخواید کدهای تکراری در شرطهای if و حلقههای while رو کاهش بدی.
🐍 @python_rd
❤2👍2
🔆 پرسپترون - آموزش عملی از کوچکترین عنصر شبکههای عصبی و تاریخچه اون به همراه پیاده سازی پایتون
🔹 https://pabloinsente.github.io/the-perceptron
🐍 @python_rd
🔹 https://pabloinsente.github.io/the-perceptron
🐍 @python_rd
🔆 باز کردن فایلهای Zip بدون Extraxt کردن!
🔹فرض کن یه فایل Zip داری که توش پر از فایلهای متنی یا CSV هست و فقط میخوای محتوای یکیشون رو توی پایتون بخونی. نیازی نیست کل فایل رو روی هارد Extract کنی
🔹پایتون ماژول داخلی به اسم zipfile داره که این کار رو مستقیماً توی حافظه (RAM) انجام میده:
🔹 به چه دردی میخوره اصلا؟
۱. سرعت بالا: نیازی به درگیر کردن I/O دیسک نیست.
۲. کد تمیزتر: نیازی نیست فایلهای موقت اکسترکتشده رو بعد از تموم شدن کار پاک کنی.
🐍 @python_rd
🔹فرض کن یه فایل Zip داری که توش پر از فایلهای متنی یا CSV هست و فقط میخوای محتوای یکیشون رو توی پایتون بخونی. نیازی نیست کل فایل رو روی هارد Extract کنی
🔹پایتون ماژول داخلی به اسم zipfile داره که این کار رو مستقیماً توی حافظه (RAM) انجام میده:
import zipfile
# باز کردن فایل زیپ بدون اکسترکت روی دیسک
with zipfile.ZipFile('data.zip', 'r') as z:
# خواندن مستقیم محتوای یک فایل داخل زیپ
with z.open('notes.txt') as f:
content = f.read().decode('utf-8')
print(content)
🔹 به چه دردی میخوره اصلا؟
۱. سرعت بالا: نیازی به درگیر کردن I/O دیسک نیست.
۲. کد تمیزتر: نیازی نیست فایلهای موقت اکسترکتشده رو بعد از تموم شدن کار پاک کنی.
🐍 @python_rd
❤3
🔆 نسخه فارسی دیزاین پترن به زبان آدمیزاد که برای زبانهای برنامهنویسی دیگه به جز پایتون و جاوا هم مثالهای خوبی زده. در کنار ریپوهای اصلی انگلیسی که خوندشون خیلی به مهارتهای یک مهندس نرمافزار کمک میکنه.
🔹 Persian:
https://github.com/3lf/design-patterns-for-humans
🔹 English Version: https://github.com/rommel-sunga/design-patterns-for-humans-python
https://github.com/kamranahmedse/design-patterns-for-humans
🐍 @python_rd
🔹 Persian:
https://github.com/3lf/design-patterns-for-humans
🔹 English Version: https://github.com/rommel-sunga/design-patterns-for-humans-python
https://github.com/kamranahmedse/design-patterns-for-humans
🐍 @python_rd
GitHub
GitHub - 3lf/design-patterns-for-humans: آموزش دیزاین پترن به زبون آدمیزاد - Teaching design patterns in Persian
آموزش دیزاین پترن به زبون آدمیزاد - Teaching design patterns in Persian - 3lf/design-patterns-for-humans