PyCoders (پایتون)
Відкрити в Telegram
◇ #پایتون جادوگر دنیای برنامه نویسی! ◇ معرفی حوزه های کاری پایتون ◇ معرفی کتابخونه های کاربردی ◇ معرفی دوره های مفید ◇ معرفی تکنیک ها و نکات ◇ نقشه راه حوزه های مختلف ◇ اخبار و آپدیت های پایتون ◇ و هر چیزی در مورد پایتون! ■ گروه پایتون: @programmers_py
Показати більше4 105
Підписники
-124 години
-17 днів
-330 днів
Завантажуємо дані
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
жовтень '26жовт '26
жовтень '26
+14
в 1 каналах
вересень '260
в 0 каналах
Get PRO
серпень '260
в 3 каналах
Get PRO
липень '260
в 1 каналах
Get PRO
червень '260
в 0 каналах
Get PRO
травень '26
+2
в 0 каналах
Get PRO
квітень '26
+11
в 0 каналах
Get PRO
березень '26
+4
в 0 каналах
Get PRO
лютий '26
+24
в 0 каналах
Get PRO
січень '26
+22
в 0 каналах
Get PRO
грудень '25
+44
в 0 каналах
Get PRO
листопад '25
+37
в 1 каналах
Get PRO
жовтень '25
+32
в 0 каналах
Get PRO
вересень '25
+38
в 1 каналах
Get PRO
серпень '25
+48
в 1 каналах
Get PRO
липень '25
+41
в 0 каналах
Get PRO
червень '25
+52
в 4 каналах
Get PRO
травень '25
+73
в 3 каналах
Get PRO
квітень '25
+78
в 4 каналах
Get PRO
березень '25
+41
в 1 каналах
Get PRO
лютий '25
+64
в 1 каналах
Get PRO
січень '25
+121
в 0 каналах
Get PRO
грудень '24
+145
в 1 каналах
Get PRO
листопад '24
+216
в 2 каналах
Get PRO
жовтень '24
+196
в 5 каналах
Get PRO
вересень '24
+167
в 2 каналах
Get PRO
серпень '24
+238
в 3 каналах
Get PRO
липень '24
+213
в 1 каналах
Get PRO
червень '24
+286
в 3 каналах
Get PRO
травень '24
+229
в 1 каналах
Get PRO
квітень '24
+266
в 6 каналах
Get PRO
березень '24
+266
в 4 каналах
Get PRO
лютий '24
+257
в 2 каналах
Get PRO
січень '24
+206
в 3 каналах
Get PRO
грудень '23
+256
в 2 каналах
Get PRO
листопад '23
+304
в 3 каналах
Get PRO
жовтень '23
+77
в 2 каналах
Get PRO
вересень '23
+124
в 0 каналах
Get PRO
серпень '23
+194
в 0 каналах
Get PRO
липень '23
+312
в 0 каналах
Get PRO
червень '23
+161
в 0 каналах
Get PRO
травень '23
+173
в 0 каналах
Get PRO
квітень '23
+459
в 0 каналах
Get PRO
березень '23
+1 401
в 0 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 22 жовтня | +2 | |||
| 21 жовтня | +1 | |||
| 20 жовтня | +4 | |||
| 19 жовтня | +2 | |||
| 18 жовтня | +2 | |||
| 17 жовтня | +1 | |||
| 16 жовтня | +1 | |||
| 15 жовтня | 0 | |||
| 14 жовтня | 0 | |||
| 13 жовтня | +1 |
Дописи каналу
🔆 وضعیت رسمی 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 |
