TGViewer
Channel Public Channel
PyCoders (پایتون)

PyCoders (پایتون)

@python_rd

◇ #پایتون جادوگر دنیای برنامه نویسی!
◇ معرفی حوزه های کاری پایتون
◇ معرفی کتابخونه های کاربردی
◇ معرفی دوره های مفید
◇ معرفی تکنیک ها و نکات
◇ نقشه راه حوزه های مختلف
◇ اخبار و آپدیت های پایتون
◇ و هر چیزی در مورد پایتون!

■ گروه پایتون:
@programmers_py
Subscribers
4.1K
Photos
979
Videos
148
Links
238

Showing posts older than #2157 · Back to latest

Older Posts 20 shown
Post #2156 550
🔆 مدیریت منابع مثل حرفه‌ای‌ها: چطور با with مدیریت خطای تمیز بنویسیم؟

🔹دستور with رو همه برای باز کردن فایل (open) می‌شناسند، اما قدرتش خیلی بیشتر از این حرف‌هاست. هر جایی که نیاز به الگوی "آماده‌سازی -> اجرا -> تمیزکاری" داری، Context Manager نجات‌دهنده است.

🔹دو روش ساخت Context Manager سفارشی:

.روش اول: استفاده از Magic Methodها

با تعریف متدهای enter و exit در کلاس:
import time

class Timer:
def __enter__(self):
self.start = time.perf_counter()
return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.end = time.perf_counter()
print(f"زمان اجرا: {self.end - self.start:.4f} ثانیه")
# اگر True برگردانی، خطاهای داخل بلوک with سائلنت می‌شوند!
return False

with Timer():
# کدی که می‌خواهی زمان اجرای آن سنجیده شود
sum(i**2 for i in range(1_000_000))

🔹روش دوم: راهکار سریع‌تر با contextlib

بدون نیاز به نوشتن کلاس و فقط با یک Generator:
from contextlib import contextmanager

@contextmanager
def managed_resource():
print("۱. تخصیص منبع (Connect / Open)")
try:
yield "Resource Object"
finally:
print("۲. آزادسازی منبع (Disconnect / Close)")

# استفاده:
with managed_resource() as res:
print(f"در حال کار با {res}")

🔹 به چه دردی میخوره؟

مدیریت Transactionهای دیتابیس، قفل‌های Multithreading، و اندازه‌گیری زمان اجرای سرویس‌ها.

🐍 @python_rd
  • ❤ 1
Post #2155 473
🔆 این سایت مسیرهای یادگیری گام به گام رو در اختیار شما قرار می ده که می تونید برای یادگیری حالت‌های مختلف concurrency در پایتون ازشون استفاده کنید.

🔹https://superfastpython.com/learning-paths

🐍 @python_rd
  • ❤‍🔥 1
  • ❤ 1
Post #2154 461
🔆 متد init واقعاً Constructor نیست! (داستان واقعی ساخت Object در پایتون)

🔹 خیلی‌ها فکر می‌کنند init شیء جدید را می‌سازد، اما در واقع این متد فقط شیء ساخته‌شده را مقداردهی اولیه (Initialize) می‌کند. سازندهٔ واقعی پایتون متد new است!

🔹 تفاوت اصلی در چیست؟

new:
یک classmethod است که خودِ متغیر cls را می‌گیرد، شیء جدید را ایجاد می‌کند و برمی‌گرداند.
init:
شیء ایجادشده (self) را می‌گیرد و ویژگی‌های آن را تنظیم می‌کند.


🔹 نمونه کاربرد واقعی: پیاده‌سازی الگوی Singleton

اگر بخواهی کلاس فقط و فقط یک نمونه (Instance) در کل برنامه داشته باشد، باید سراغ new بروی:
class DatabaseConnection:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            # ساخت شیء فقط برای بار اول
            cls._instance = super().__new__(cls)
        return cls._instance

# تست:
db1 = DatabaseConnection()
db2 = DatabaseConnection()

print(db1 is db2)  # Output: True (هر دو دقیقاً یک Object هستند)

🔹کاربرد دیگر: تغییر رفتار Typeهای Immutable (مثل تغییر دادن رفتار string یا tuple موقع ساخته شدن).

🐍 @python_rd
  • ❤ 1
Post #2153 446
🔆 ترفند: کد تمیزتر و سریع‌تر با dict.get() به جای if-else


🔹 خیلی از برنامه‌نویس‌ها موقع گرفتن مقدار از یک دیکشنری، اول بررسی می‌کنن ببینن کلید وجود داره یا نه. این کار کد رو طولانی و شلوغ می‌کنه.


🔹 روش معمولی و شلوغ:
user_data = {"name": "Reza", "role": "Developer"}

if "age" in user_data:
age = user_data["age"]
else:
age = 18 # مقدار پیش‌فرض

print(age)

🔹 روش حرفه‌ای:
user_data = {"name": "Reza", "role": "Developer"}

# اگر کلید نباشه، خودکار مقدار پیش‌فرض رو برمی‌گردونه
age = user_data.get("age", 18)

print(age)

🔹 چرا این روش بهتره؟

* کد کوتاه‌تر: ۴ خط کد تبدیل به ۱ خط میشه.
* جلوگیری از KeyError: اگر کلید وجود نداشته باشه، برنامه‌ت کرش نمیکنه.
* خوانایی بالا: کدت خواناتر و حرفه‌ای‌تر به‌نظر می‌رسه.

🔹 نکته: اگر مقدار دوم متد .get() رو مشخص نکنی، به صورت پیش‌فرض None برمی‌گردونه.

🐍 @python_rd
Post #2150 617
🔆کتاب خوبی برای یادگیری مفاهیم یادگیری عمیق به همراه notebook های پایتون که مربوط به کدهای داخل کتابه.

🔹https://udlbook.github.io/udlbook

🐍 @python_rd
Post #2148 503
🔆 یک خط کد که جلوی باگ‌های عجیب رو می‌گیره!

🔹 به‌جای این‌که فایل رو دستی باز و بسته کنی، از with استفاده کن:
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()

🔹 حتی اگه وسط کار خطا رخ بده، پایتون فایل رو درست می‌بنده.

کد تمیزتر، مدیریت منابع بهتر، باگ کمتر.

🐍 @python_rd
Post #2147 536
🔆دام خطرناک لیست پیش‌فرض در تابع

🔹این کد در نگاه اول درست به نظر می‌رسه:

def add_item(item, items=[]):
items.append(item)
return items

🔹اما لیست items فقط یک‌بار ساخته می‌شه و بین همه‌ی فراخوانی‌ها مشترکه!

راه درست:

def add_item(item, items=None):
if items is None:
items = []

items

🐍 @python_rd
  • 👍 2
  • 👎 1
Post #2145 510
🔆 افزایش ۱۰ برابری سرعت برنامه‌های پایتون فقط با ۱ خط کد!

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

🔹پایتون برای این کار یک ابزار فوق‌العاده توی کتابخونه داخلی 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
  • ❤ 4
  • 🔥 1
Post #2144 503
🔆 چرا پایتون کندتر از C عه، ولی دنیای AI و Data Science رو فتح کرده؟

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

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

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

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

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

🔹 ۳. GIL (Global Interpreter Lock):

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

🐍 @python_rd
Post #2143 534
🔆دیباگ حرفه‌ای در جنگو

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

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

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

🐍 @python_rd
  • 🔥 1
Post #2142 572
🔆 قدرت Generator ها

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

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

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

از پرانتز
()

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

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

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

🐍 @python_rd
  • 👍 6
Post #2141 599
بچه ها خارج از موضوع کانال، اگه VPN نیاز دارید بهتون

🔹@Red_fire_vpn

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

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

خودمم ازشون خرید کردم.
Post #2140 767
🔆 با کمک این سایت و تمرینات باحال و interactive اش اگه تا حالا پایتون رو یاد نگرفتید شروع کنید یادگرفتن. از ساده داره تا سخت و مسائل جالبی رو مطرح میکنه

https://genepy.org/exercises
  • ❤ 1
Post #2139 736
🔆 نسخه فارسی دیزاین پترن به زبان آدمیزاد که برای زبان‌های برنامه‌نویسی دیگه به جز پایتون و جاوا هم مثال‌های خوبی زده. در کنار ریپوهای اصلی انگلیسی که خوندشون خیلی به مهارت‌های یک مهندس نرم‌افزار کمک میکنه.

🔹 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
Post #2138 576
🔆 باز کردن فایل‌های 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
Post #2136 632
🔆 آشنایی با عملگر والروس (:=)

🔹عملگر := (که به خاطر شباهتش به چشمان و عاج‌های والروس، 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
  • ❤ 3
  • 👍 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →