uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

PyCoders (پایتون)

PyCoders (پایتون)

Відкрити в Telegram

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

Показати більше
4 105
Підписники
-124 години
-17 днів
-330 днів
Залучення підписників
жовт '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
🔆 کتابی در سطح متوسط برای یادگیری نکات زبان پایتون 🔹 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
🔆 یادگیری پایتون با پروژه های ساده و جذاب 🔹 codeclubprojects.org/en-GB/python 🐍 @python_rd
276
9
🔆 یک سایت خوب پر از پادکست‌های مرتبط با زبان پایتون 🔹 talkpython.fm 🐍 @python_rd
🔆 یک سایت خوب پر از پادکست‌های مرتبط با زبان پایتون 🔹 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
🔆 نکات کلیدی برای تمیزتر کد زدن در پایتون و چندزبان دیگر 🔹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