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

■ گروه پایتون:
@programmers_py
Download Telegram
🔆 لاگ‌گیریِ حرفه‌ای بدون دردسر با 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
🔆 اعدادی که تو پایتون هیچ‌وقت پاک نمی‌شن!


🔹 می‌دونستی پایتون یه کلوپ اختصاصی برای اعدادی داره که هیچ‌وقت از حافظه 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


🔹تا حالا شده بخوای توی یک دیکشنری بسته‌بندی یا گروه‌بندی انجام بدی و هی مجبور باشی وجود کلید رو بررسی کنی؟

🔹 روش پردردسر:
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
🔆 مشاهده رمز های ذخیره شده شبکه های وای فای در ویندوز.

🔹 کد:
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
👍1
🔆 تست!

🔸 خروجی چیه؟
x = 256
y = 256
print(x is y)

m = 257
n = 257
print(m is n)

🐍 @pyrhon_rd
🔥1
🔆 چطوری مثل یه پایتونکار حرفه‌ای کد بزنم؟

🔹 خیلی وقت‌ها می‌خوایم مقداری رو از یک دیکشنری بگیریم، اما اگه کلید وجود نداشته باشه برنامه‌مون با 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://github.com/pablogsal/python-horror-show

🐍 @python_rd
1
🔆 آشنایی با عملگر والروس (:=)

🔹عملگر := (که به خاطر شباهتش به چشمان و عاج‌های والروس، 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
🔆 باز کردن فایل‌های Zip بدون Extraxt کردن!

🔹فرض کن یه فایل 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
🔆 با کمک این سایت و تمرینات باحال و interactive اش اگه تا حالا پایتون رو یاد نگرفتید شروع کنید یادگرفتن. از ساده داره تا سخت و مسائل جالبی رو مطرح میکنه

https://genepy.org/exercises
1
بچه ها خارج از موضوع کانال، اگه VPN نیاز دارید بهتون

🔹@Red_fire_vpn

رو معرفی و پیشنهاد میکنم.

تبلیغ نیست، قیمتاشون پایینه کیفیتشونم خوبه. از بچه‌های خودمونم هستن غریبه نیستن😁

خودمم ازشون خرید کردم.
🔆 قدرت Generator ها

چرا لیست‌های بزرگ توی پایتون حافظه رو می‌ترکونن؟

🔹 وقتی می‌نویسی
[x for x in range(1000000)]

تمام این لیست میره توی RAM. اگه به جای
[]

از پرانتز
()

استفاده کنی، داری از
Generator

استفاده می‌کنی.

🔹تفاوت؟ جنریتورها آیتم‌ها رو یکی‌یکی تولید می‌کنن (Lazy Evaluation). یعنی به جای اشغال کردن فضای زیاد، فقط وقتی لازم داری محاسبه می‌شن. برای پردازش فایل‌های بزرگ یا دیتای حجیم، جنریتورها بهترین دوست تو هستن.

🐍 @python_rd
👍5
🔆دیباگ حرفه‌ای در جنگو

🔹 با django-debug-toolbar رفیق شو!

🔹 خیلی وقت‌ها فکر می‌کنیم کدمون بهینه است، اما وقتی پنل دیباگ رو باز می‌کنیم، می‌بینیم ۱۰ تا کوئری تکراری به دیتابیس زدیم. این ابزار بهت نشون میده دقیقاً چند تا کوئری، در چه زمانی و با چه پارامترهایی اجرا شدن.

🔹 بهترین راه برای شناسایی مشکلاتی مثل N+1 Query همینه.

🐍 @python_rd
🔥1
🔆 چرا پایتون کندتر از C عه، ولی دنیای AI و Data Science رو فتح کرده؟

🔹همه‌مون شنیدیم که می‌گن «پایتون یک زبان کنده!». خب اگه کنده، چرا OpenAI، Google و Meta پروژه‌های هوش مصنوعی‌شون رو روی پایتون پیاده می‌کنن؟
راز داستان چیه؟

🔹 ۱. کتابخونه‌های C/C++ تحت پوشش:

کتابخونه‌های سنگینی مثل NumPy یا PyTorch روی پایتون اجرا می‌شن، اما هسته اصلیشون با C و C++ نوشته شده! پایتون فقط نقش یک «چسب» خوش‌دست رو بازی می‌کنه.

🔹 ۲. سرعت توسعه > سرعت اجرا:

در دنیای واقعی، زمانی که برنامه نویس صرف کدزدن می‌کنه گرون‌تر از زمان پردازش سروره!

🔹 ۳. GIL (Global Interpreter Lock):

قفلی که جلوی اجرای همزمان واقعی چند ترد (Multi-threading) رو می‌گرفت، حالا در نسخه‌های جدید پایتون (Python 3.13+) داره اختیاری/حذف میشه تا پایتون سریع‌تر از همیشه بشه.

🐍 @python_rd
🔆 افزایش ۱۰ برابری سرعت برنامه‌های پایتون فقط با ۱ خط کد!

🔹 تا حالا شده توی پایتون یک تابع محاسباتی سنگین (مثل فاکتوریل، فیبوناچی یا پردازش داده) داشته باشی که با ورودی‌های تکراری مدام اجرا بشه و سی‌پی‌یو رو درگیر کنه؟

🔹پایتون برای این کار یک ابزار فوق‌العاده توی کتابخونه داخلی functools داره به اسم @cache (یا @lru_cache).

🔹 روش عادی (اجرای مجدد محاسبات تکراری):
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)

# برای n = 35 چند ثانیه طول می‌کشه و میلیون‌ها محاسبه تکراری انجام میده!
print(fibonacci(35))


🔹روش هوشمندانه با Cache (ذخیره نتایج قبلی در حافظه):
from functools import cache

@cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)

# اجرای همون کد در کسری از میلی‌ثانیه (O(n) به جای O(2^n))!
print(fibonacci(35))

🔹 چطور کار می‌کنه؟
وقتی دکوراتور @cache رو بالای تابع می‌ذاری، پایتون ورودی‌ها و خروجی‌های تابع رو یادش می‌مونه. دفعه بعد که همون ورودی داده بشه، به جای محاسبه مجدد، بلافاصله جواب رو از رم برمی‌گردونه!

🐍 @python_rd
1🔥1