PyCoders (پایتون)
Ir al canal en Telegram
◇ #پایتون جادوگر دنیای برنامه نویسی! ◇ معرفی حوزه های کاری پایتون ◇ معرفی کتابخونه های کاربردی ◇ معرفی دوره های مفید ◇ معرفی تکنیک ها و نکات ◇ نقشه راه حوزه های مختلف ◇ اخبار و آپدیت های پایتون ◇ و هر چیزی در مورد پایتون! ■ گروه پایتون: @programmers_py
Mostrar más4 105
Suscriptores
-124 horas
-17 días
-330 días
Cargando datos
Canales Similares
Nube de Etiquetas
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
octubre '26oct '26
octubre '26
+14
en 1 canales
septiembre '260
en 0 canales
Get PRO
agosto '260
en 3 canales
Get PRO
julio '260
en 1 canales
Get PRO
junio '260
en 0 canales
Get PRO
mayo '26
+2
en 0 canales
Get PRO
abril '26
+11
en 0 canales
Get PRO
marzo '26
+4
en 0 canales
Get PRO
febrero '26
+24
en 0 canales
Get PRO
enero '26
+22
en 0 canales
Get PRO
diciembre '25
+44
en 0 canales
Get PRO
noviembre '25
+37
en 1 canales
Get PRO
octubre '25
+32
en 0 canales
Get PRO
septiembre '25
+38
en 1 canales
Get PRO
agosto '25
+48
en 1 canales
Get PRO
julio '25
+41
en 0 canales
Get PRO
junio '25
+52
en 4 canales
Get PRO
mayo '25
+73
en 3 canales
Get PRO
abril '25
+78
en 4 canales
Get PRO
marzo '25
+41
en 1 canales
Get PRO
febrero '25
+64
en 1 canales
Get PRO
enero '25
+121
en 0 canales
Get PRO
diciembre '24
+145
en 1 canales
Get PRO
noviembre '24
+216
en 2 canales
Get PRO
octubre '24
+196
en 5 canales
Get PRO
septiembre '24
+167
en 2 canales
Get PRO
agosto '24
+238
en 3 canales
Get PRO
julio '24
+213
en 1 canales
Get PRO
junio '24
+286
en 3 canales
Get PRO
mayo '24
+229
en 1 canales
Get PRO
abril '24
+266
en 6 canales
Get PRO
marzo '24
+266
en 4 canales
Get PRO
febrero '24
+257
en 2 canales
Get PRO
enero '24
+206
en 3 canales
Get PRO
diciembre '23
+256
en 2 canales
Get PRO
noviembre '23
+304
en 3 canales
Get PRO
octubre '23
+77
en 2 canales
Get PRO
septiembre '23
+124
en 0 canales
Get PRO
agosto '23
+194
en 0 canales
Get PRO
julio '23
+312
en 0 canales
Get PRO
junio '23
+161
en 0 canales
Get PRO
mayo '23
+173
en 0 canales
Get PRO
abril '23
+459
en 0 canales
Get PRO
marzo '23
+1 401
en 0 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 22 octubre | +2 | |||
| 21 octubre | +1 | |||
| 20 octubre | +4 | |||
| 19 octubre | +2 | |||
| 18 octubre | +2 | |||
| 17 octubre | +1 | |||
| 16 octubre | +1 | |||
| 15 octubre | 0 | |||
| 14 octubre | 0 | |||
| 13 octubre | +1 |
Publicaciones del Canal
🔆 وضعیت رسمی Free-threaded (بدون GIL) و JIT
🔹 نسخه پایدار Python 3.14 تغییرات بزرگی را در هسته زبان تثبیت کرد. مهمترین نکات از اسناد رسمی پایتون عبارتند از:
🔹 پشتیبانی رسمی از Free-threaded: حالت بدون GIL (مبتنی بر PEP 703 و PEP 779) دیگر آزمایشی نیست و رسماً پشتیبانی میشود (با جریمه عملکردی بسیار ناچیز ۵ تا ۱۰ درصدی در کدهای تکنخی).
🔹 کامپایلر JIT آزمایشی: باینریهای رسمی ویندوز و macOS حالا شامل JIT آزمایشی هستند که با تنظیم متغیر محیطی
PYTHON_JIT=1 فعال میشود. همچنین فضاینام جدید sys._jit برای بررسی وضعیت JIT اضافه شده است.
🔹 منبع رسمی: Python 3.14 Release Notes - What’s New in Python
🐍 @python_rd| 2 | 🔆 ترفند باز کردن فایلها با contextlib.suppress به جای try-except
🔹 وقتی میخواهید از بروز یک خطای خاص (مثل پیدا نشدن فایل برای حذف) جلوگیری کنید، نوشتن بلوکهای متعدد try-except-pass کد را شلوغ میکند. ماژول داخلی contextlib تابع بینظیری به نام suppress دارد.
from contextlib import suppress
import os
# روش قدیمی و شلوغ
try:
os.remove("temp_cache.log")
except FileNotFoundError:
pass
# روش تمیز و حرفهای با contextlib.suppress
with suppress(FileNotFoundError):
os.remove("temp_cache.log")
print("فایل پاک شد یا اصلاً وجود نداشت!")
🔹 نکته: این روش خوانایی کد را به شدت بالا میبرد و سرعت اجرای آن تفاوتی با try-except سنتی ندارد چون در سطح CPython بهینه شده است.
🐍 @python_rd | 185 |
| 3 | 🔆 کتابی در سطح متوسط برای یادگیری نکات زبان پایتون
🔹 github.com/yasoob/intermediatePython
🐍 @pyrhon_rd | 223 |
| 4 | 🔆 پیادهسازی مقادیر پیشفرض مشروط با collections.ChainMap
🔹 فرض کنید برنامهای دارید که تنظیمات را از ۳ منبع اولویتدار میخواند: آرگومانهای ورودی CLI، متغیرهای محیطی، و فایل پیشفرض Config.
بهجای نوشتن شرطهای متوالی و متدهای متعدد .get():
from collections import ChainMap
default_config = {'theme': 'dark', 'port': 8000, 'debug': False}
env_config = {'port': 9000, 'debug': True}
cli_args = {'theme': 'light'}
# اولویت از چپ به راست: CLI > ENV > DEFAULT
config = ChainMap(cli_args, env_config, default_config)
print(config['theme']) # light (از cli)
print(config['port']) # 9000 (از env)
print(config['debug']) # True (از env)
🔹 کلاس ChainMap بدون کپی کردن دیکشنریها، آنها را به صورت یک لایهٔ مجازی و زنده پیوند میدهد و هنگام تغییر لایه اول، دادهٔ اصلی حفظ میشود.
🐍 @python_rd | 245 |
| 5 | 🔆 رفتار Scoping در Comprehension پایتون ۳
🔹 خروجی قطعه کد زیر چیست؟
x = 10
funcs = [lambda: x for x in range(3)]
results = [f() for f in funcs]
print(x, results)
الف) 10 [0, 1, 2]
ب) 2 [2, 2, 2]
ج) 10 [2, 2, 2]
د) 10 [0, 1, 10]
🐍 @python_rd | 231 |
| 6 | 🔆 پایتون رسماً سریعتر میشود؛ ورود تیم مفسر JIT به پروژه CPython!
🔹 توسعهدهندگان ارشد هسته پایتون خبر دادند که کار روی اضافه کردن یک مفسر JIT (Just-In-Time) داخلی به نسخه آینده پایتون با سرعت بالایی در حال پیشرفت است.
🔹 منبع معتبر: وبلاگ رسمی بنیانگذار پایتون (Guido van Rossum) و مخزن گیتهاب رسمی CPython (PEP 744)
🔹 جریان کار چیست؟ تا پیش از این، کدهای پایتون به بایتکد تبدیل و توسط مفسر بایتکد پایتون اجرا میشدند. با مکانیزم جدید JIT (که با الگوبرداری از پایتونهای جایگزین مثل PyPy و پیشرفتهای مدرن پیادهسازی شده)، پایتون کدهای تکرارپذیر را در زمان اجرا به زبان ماشین کامپایل میکند.
🔹 نتیجه: بنچمارکهای اولیه نشان میدهد که سرعت اجرای حلقهها و محاسبات عددی بدون نیاز به تغییر دادن کدهای فعلی، بین ۱۰ تا ۲۰ درصد بهبود پیدا میکند. پایتون آرامآرام ضعف بزرگ سرعتی خود را پوشش میدهد!
🐍 @python_rd | 246 |
| 7 | 🔆 مجموعهای از نرمافزارهای متنباز که با استفاده از زبان پایتون نوشتهشدهاند
🔹 github.com/mahmoud/awesome-python-applications
🐍 @python_rd | 257 |
| 8 | 🔆 یادگیری پایتون با پروژه های ساده و جذاب
🔹 codeclubprojects.org/en-GB/python
🐍 @python_rd | 276 |
| 9 | 🔆 یک سایت خوب پر از پادکستهای مرتبط با زبان پایتون
🔹 talkpython.fm
🐍 @python_rd | 321 |
| 10 | 🌐 خروجی این کد پایتون چیست؟
x = [1, 2, 3]
y = x
x += [4, 5]
print(x)
print(y)
🔹 گزینهها:
🔹A)
[1, 2, 3, 4, 5]
[1, 2, 3]
🔹B)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
🔹C)
Error
🔹D)
[4, 5]
[1, 2, 3]
🐍 @python_rd | 338 |
| 11 | 🔆 آیا enumerate() بهتر از index-based loop است؟
🔹 خیلیها هنوز این شکلی مینویسند:
items = ["apple", "banana", "orange"]
for i in range(len(items)):
print(i, items[i])
🔹 ولی راه پایتونیکتر:
items = ["apple", "banana", "orange"]
for index, value in enumerate(items):
print(index, value)
🔹 اگر index را از 1 بخواهی:
for index, value in enumerate(items, start=1):
print(index, value)
🔹 چرا بهتر است؟
خواناتر است
خطای index کمتر میشود
پایتونیکتر و حرفهایتر است
🔹 این از آن تفاوتهای کوچک است که کیفیت کد را در بلندمدت خیلی بالا میبرد.
🐍 @python_rd | 288 |
| 12 | 🔆 یک تله عجیب در پایتون: bool در واقع زیرکلاس int است
🔹 خیلیها میدانند True == 1 و False == 0، اما نکته عجیبتر اینجاست که:
print(isinstance(True, int)) # True
print(True + True) # 2
print(False + 10) # 10
🔹 این یعنی:
True و False فقط مقدار بولی نیستند
در سطح type system، از int ارثبری میکنند
🔹 این رفتار در خیلی از سناریوها مفید است، ولی اگر روی counting، hashing یا data processing کار کنی، گاهی میتواند نتایج عجیبی بسازد.
🐍 @python_rd | 281 |
| 13 | کوییز پایتون
🔆 خروجی اجرای کد زیر چیست؟
t = (1, 2, [3, 4])
try:
t[2] += [5]
except TypeError:
pass
print(t)
🔹 گزینهها:
1️⃣ (1, 2, [3, 4])
2️⃣ (1, 2, [3, 4, 5])
3️⃣ خطای مدیریتنشده رخ میدهد و برنامه متوقف میشود
4️⃣ خروجی (1, 2, [5]) خواهد بود
🐍@python_rd | 350 |
| 14 | 🔆 راز مکانیزم پیادهسازی و تغییر جهت NaN در الگوریتم مرتبسازی پایتون (Timsort)
🔹 باگ ریاضیاتی پنهان: چرا پایتون هیچوقت نمیتواند لیستی از NaNها را مرتب کند؟!
🔹 در پایتون، مقدار float('nan') (Not a Number) خصوصیت عجیبی دارد:
nan طبق استاندارد IEEE-754 با خودش هم برابر نیست!
float('nan') == float('nan') ⬅️ خروجی False است!
float('nan') < 5 ⬅️ باز هم False است!
🔹 حالا شگفتی ماجرا در متد .sort() پایتون است:
الگوریتم مرتبسازی CPython یعنی Timsort بر اصل تقارن و ترتیبی بودن مقایسهها استوار است. اگر شما لیستی شامل اعداد و NaN را با .sort() مرتب کنید:
🔹 نتیجه خروجی به ترتیب قرارگیری اولیه عناصر بستگی دارد و غیرقابلپیشبینی است!
🔹 پایتون هیچ خطایی (Error) پرتاب نمیکند، اما خروجی نهایی مرتبشده نخواهد بود!
🔹 مهندسان CPython سالهاست که در گیتهاب پایتون روی این موضوع بحث دارند و تصمیم گرفتهاند برای حفظ پرفورمنس Timsort، هیچ لایه اعتبارسنجی اضافی اضافه نکنند و این مسئولیت را روی دوش برنامهنویس بگذارند!
🐍@python_rd | 332 |
| 15 | 🔆 حذف تاریخی GIL از پایتون (Free-threaded Python)
🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL) از هسته CPython رسماً کلید خورد!
🔹 سرانجام پس از سالها بحث و مناظره در بنیاد نرمافزار پایتون (PSF)، طرح PEP 703 (معروف به Free-threaded CPython) تصویب و گامهای اجرایی آن آغاز شد. با این تغییر، مفسر پایتون میتواند از تمام هستههای پردازنده (Multi-Core CPU) در Multi-threading به صورت واقعی بهره ببرد بدون اینکه گلوگاه قفل مفسر سر راهش باشد.
🔹 نکات کلیدی این تحول:
▪️ پشتیبانی اولیه به صورت بیلد آزمایشی (Experimental / --disable-gil) در دسترس قرار گرفته است.
▪️ تیمهای توسعه کتابخانههای بزرگ مانند NumPy و PyTorch در حال بازنویسی بخشهای C-API خود برای سازگاری با حالت بدون GIL هستند.
▪️ طبق پیشبینی هسته مرکزی، پایتون در پردازشهای سنگین موازی تا چند برابر افزایش کارایی را تجربه خواهد کرد.
🔹 منبع رسمی:
• مستندات رسمی PEP 703: peps.python.org/pep-0703
• اعلامیه Steering Council پایتون: discuss.python.org
🐍 @python_rd | 362 |
| 16 | 🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib)
🔹 ساخت Context Managerها معمولاً با نوشتن کلاس و متدهای enter و exit انجام میشود. اما با دکوراتور contextmanager@ از ماژول contextlib میتوانید این کار را خیلی سریعتر و پایتونیکتر انجام دهید.
from contextlib import contextmanager
import time
@contextmanager
def measure_time(task_name: str):
start_time = time.perf_counter()
print(f"--- شروع: {task_name} ---")
try:
yield # کنترل اجرا در این نقطه به بدنه with منتقل میشود
finally:
elapsed = time.perf_counter() - start_time
print(f"--- پایان: {task_name} | زمان اجرا: {elapsed:.4f} ثانیه ---\n")
# استفاده کاربردی
with measure_time("پردازش سنگین دادهها"):
# شبیهسازی یک کار سنگین
total = sum(i**2 for i in range(10_000_000))
print(f"نتیجه محاسبات: {total}")
🐍 @python_rd | 329 |
| 17 | 🔆 چرا برای دادههای حجیم نباید از return استفاده کنی؟
🔹 وقتی یک تابع لیست بزرگی از دادهها رو با return برمیگرداند، کل دادهها باید همزمان توی رم (RAM) لود بشن که باعث مصرف شدید حافظه و کندی سیستم میشه.
🔹 اما اگر به جای return از yield استفاده کنی، تابع تبدیل به یک Generator میشه که دادهها رو به صورت تکبهتک و تنبل (Lazy Evaluation) تولید میکنه:
def read_large_file(file_path):
with open(file_path, 'r') as f:
for line in f:
yield line.strip() # هر بار فقط یک خط را در حافظه نگه میدارد
🔹با این روش میتونی فایلهای چند گیگابایتی رو با مصرف چند مگابایت رم پردازش کنی!
🐍 @python_rd | 385 |
| 18 | 🔆 خروجی این تکه کد چیه؟
def add_item(item, lst=[]):
lst.append(item)
return lst
print(add_item(1))
print(add_item(2))
print(add_item(3, [9, 9]))
print(add_item(4))
🔹گزینهها:
الف) [1], [2], [9, 9, 3], [4]
ب) [1], [1, 2], [9, 9, 3], [1, 2, 4]
ج) [1], [2], [3], [4]
🐍 @python_rd | 393 |
| 19 | 🔆 مدیریت منابع با contextlib
🔹 از تکرار try...finally برای بستن فایلها و اتصالها خسته شدی؟
🔹 پایتون ابزاری به نام Context Manager داره که با دستور with استفاده میشه. اما اگر بخوای خودت یک Context Manager سفارشی بسازی، نیازی نیست حتماً کلاس با متدهای enter و exit بنویسی!
با ماژول contextlib و دکوراتور @contextmanager میتونی خیلی تمیز این کار رو انجام بدی:
from contextlib import contextmanager
@contextmanager
def managed_resource():
print("-> باز کردن اتصال/فایل")
yield "Resource Object"
print("-> بستن ایمن اتصال/فایل")
# استفاده:
with managed_resource() as res:
print(f"در حال کار با: {res}")
🐍 @python_rd | 384 |
| 20 | 🔆 نکات کلیدی برای تمیزتر کد زدن در پایتون و چندزبان دیگر
🔹github.com/zedr/clean-code-python
🔹github.com/jupeter/clean-code-php
🔹github.com/ryanmcdermott/clean-code-javascript
🔹github.com/thangchung/clean-code-dotnet
🔹github.com/labs42io/clean-code-typescript
🐍 @python_rd | 374 |
