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 |
