تازه‌های پایتون 3.14

ویرایشگرها:

Adam Turner و Hugo van Kemenade

این مقاله ویژگی‌های جدید پایتون 3.14 را در مقایسه با 3.13 توضیح می‌دهد. پایتون 3.14 در تاریخ ۷ اکتبر ۲۰۲۵ منتشر شد. برای جزئیات کامل، فهرست تغییرات را ببینید.

همچنین ملاحظه نمائید

PEP 745 -- زمان‌بندی انتشار پایتون 3.14

خلاصه -- نکات برجسته انتشار

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

تغییرات کتابخانه شامل بهبود چشمگیر قابلیت‌های درون‌نگری در asyncio، پشتیبانی از Zstandard از طریق ماژول جدید compression.zstd، برجسته‌سازی سینتکس در REPL، و همچنین منسوخ‌سازی‌ها و حذف‌های معمول، و بهبودهایی در کاربرپسندی و صحت است.

این مقاله تلاش نمی‌کند مشخصات کامل همه‌ی ویژگی‌های جدید را ارائه دهد، بلکه در عوض مروری مناسب از آن‌ها فراهم می‌کند. برای جزئیات کامل به مستندات مراجعه کنید، از جمله مرجع کتابخانه و مرجع زبان. برای درک پیاده‌سازی کامل و منطق طراحی یک تغییر، به PEP مربوط به ویژگی جدید موردنظر مراجعه کنید؛ اما توجه داشته باشید که PEP‌ها معمولاً پس از آنکه یک ویژگی به‌طور کامل پیاده‌سازی شد، به‌روز نگه داشته نمی‌شوند. برای راهنمایی درباره ارتقا از نسخه‌های پیشین پایتون، Porting to Python 3.14 را ببینید.


بهبودهای مفسر:

بهبودهای چشمگیر در کتابخانه استاندارد:

بهبودهای C API:

پشتیبانی از پلتفرم:

تغییرات انتشار:

قابلیت‌های جدید

PEP 649 و PEP 749: ارزیابی معوق حاشیه‌نویسی‌ها

حاشیه‌نویسی‌های توابع، کلاس‌ها و ماژول‌ها دیگر به‌طور فوری ارزیابی نمی‌شوند. در عوض، حاشیه‌نویسی‌ها در توابع ویژه‌ی حاشیه‌نویسی ذخیره می‌شوند و فقط هنگام نیاز ارزیابی می‌شوند (مگر اینکه از from __future__ import annotations استفاده شود).

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

ماژول جدید annotationlib ابزارهایی برای بررسی حاشیه‌نویسی‌های معوق فراهم می‌کند. حاشیه‌نویسی‌ها را می‌توان در قالب VALUE (که حاشیه‌نویسی‌ها را به مقادیر زمان اجرا ارزیابی می‌کند، مشابه رفتار نسخه‌های پیشین پایتون)، قالب FORWARDREF (که نام‌های تعریف‌نشده را با نشانگرهای ویژه جایگزین می‌کند) و قالب STRING (که حاشیه‌نویسی‌ها را به‌صورت رشته برمی‌گرداند) ارزیابی کرد.

این مثال نشان می‌دهد که این قالب‌ها چگونه رفتار می‌کنند:

>>> from annotationlib import get_annotations, Format
>>> def func(arg: Undefined):
...     pass
>>> get_annotations(func, format=Format.VALUE)
Traceback (most recent call last):
  ...
NameError: name 'Undefined' is not defined
>>> get_annotations(func, format=Format.FORWARDREF)
{'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}
>>> get_annotations(func, format=Format.STRING)
{'arg': 'Undefined'}

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

(مشارکت‌کرده توسط Jelle Zijlstra در PEP 749 و gh-119180؛ PEP 649 توسط Larry Hastings نوشته شد.)

همچنین ملاحظه نمائید

PEP 649

ارزیابی معوق حاشیه‌نویسی‌ها با استفاده از توصیف‌گرها

PEP 749

پیاده‌سازی PEP 649

PEP 734: مفسرهای متعدد در کتابخانه استاندارد

ران‌تایم سی‌پایتون از اجرای همزمان چند رونوشت از پایتون در یک فرایند واحد پشتیبانی می‌کند و بیش از ۲۰ سال است که این کار را انجام می‌دهد. هر یک از این رونوشت‌های جداگانه «مفسر» نامیده می‌شود. با این حال، این قابلیت تنها از طریق C-API در دسترس بوده است.

این محدودیت در پایتون 3.14 با ماژول جدید concurrent.interpreters برداشته شده است.

دست‌کم دو دلیل قابل‌توجه وجود دارد که چرا استفاده از چند مفسر مزایای چشمگیری دارد:

  • آن‌ها از یک مدل هم‌روندی جدید (برای پایتون) و دوستدار انسان پشتیبانی می‌کنند

  • موازی‌سازی واقعی چند‌هسته‌ای

برای برخی موارد استفاده، همروایی در نرم‌افزار در نگاه کلان کارایی را بهبود می‌بخشد و می‌تواند طراحی را ساده‌تر کند. در همان حال، پیاده‌سازی و نگهداری هر نوع همروایی به جز ساده‌ترین‌ها، اغلب برای مغز انسان تلاشی طاقت‌فرسا است. این موضوع به‌ویژه در مورد نخ‌های ساده صدق می‌کند (برای مثال، threading)، که در آن‌ها تمام حافظه میان همه‌ی نخ‌ها مشترک است.

با چندین مفسر ایزوله، می‌توانید از دسته‌ای از مدل‌های همزمانی، مانند فرایندهای ترتیبی ارتباط‌برقرارکننده (CSP) یا مدل بازیگر (actor)، که در زبان‌های برنامه‌نویسی دیگر مانند Smalltalk، Erlang، Haskell و Go به موفقیت دست یافته‌اند، بهره ببرید. مفسرهای متعدد را مانند نخ‌ها در نظر بگیرید، اما با اشتراک‌گذاری اختیاری.

درباره‌ی موازی‌سازی چندهسته‌ای: از پایتون 3.12 به بعد، مفسرها اکنون به اندازه‌ی کافی از یکدیگر جدا شده‌اند تا بتوان از آن‌ها به صورت موازی استفاده کرد (به PEP 684 مراجعه کنید). این امر انواعی از موارد استفاده‌ی سنگین از نظر CPU را برای پایتون ممکن می‌سازد که توسط GIL محدود شده بودند.

استفاده از چندین مفسر از بسیاری جهات شبیه به multiprocessing است، از این جهت که هر دو «فرایندهای» منطقی جداشده‌ای فراهم می‌کنند که می‌توانند به‌طور موازی اجرا شوند و به‌طور پیش‌فرض هیچ اشتراکی ندارند. با این حال، هنگام استفاده از چندین مفسر، یک برنامه منابع سیستمی کمتری استفاده می‌کند و کارآمدتر عمل می‌کند (زیرا در همان فرایند باقی می‌ماند). چندین مفسر را این‌گونه در نظر بگیرید: جداسازی فرایندها همراه با کارایی نخ‌ها.

اگرچه این ویژگی چند دهه است که وجود دارد، اما مفسرهای چندگانه به دلیل آگاهی کم و نبود ماژولی در کتابخانه استاندارد، به‌طور گسترده استفاده نشده‌اند. در نتیجه، این مفسرها در حال حاضر چندین محدودیت قابل توجه دارند که انتظار می‌رود اکنون که این ویژگی به جریان اصلی تبدیل می‌شود، به‌طور چشمگیری بهبود یابند.

محدودیت‌های فعلی:

  • راه‌اندازی هر مفسر هنوز بهینه‌سازی نشده است

  • هر مفسر بیش از حافظه‌ی لازم استفاده می‌کند (کار روی اشتراک‌گذاری داخلی گسترده میان مفسرها ادامه دارد)

  • گزینه‌های زیادی برای اشتراک‌گذاری واقعی اشیاء یا داده‌های دیگر بین مفسرها هنوز وجود ندارد (به‌جز memoryview)

  • بسیاری از ماژول‌های توسعه‌ای شخص ثالث در PyPI هنوز با چندین مفسر سازگار نیستند (تمام ماژول‌های توسعه‌ای کتابخانه استاندارد سازگار هستند)

  • رویکرد به نوشتن برنامه‌هایی که از چندین مفسر ایزوله استفاده می‌کنند، فعلاً برای کاربران پایتون عمدتاً ناآشناست

تأثیر این محدودیت‌ها به بهبودهای آتی سی‌پایتون، نحوه استفاده از مفسرها و مسائلی که کامیونیتی از طریق بسته‌های PyPI حل می‌کند، بستگی خواهد داشت. بسته به مورد استفاده، ممکن است این محدودیت‌ها تأثیر چندانی نداشته باشند، پس آن را امتحان کنید!

علاوه بر این، نسخه‌های آینده‌ی سی‌پایتون سربار را کاهش داده یا حذف خواهند کرد و ابزارهایی فراهم خواهند کرد که کمتر مناسب است در PyPI قرار بگیرند. در این میان، بیشترِ محدودیت‌ها را می‌توان از طریق ماژول‌های توسعه‌ای نیز برطرف کرد؛ به این معنا که بسته‌های PyPI می‌توانند برای 3.14 هر شکافی را پر کنند و حتی تا 3.12، نسخه‌ای که در آن مفسرها سرانجام به‌درستی جدا شدند و اشتراک قفل مفسر سراسری را متوقف کردند. به همین ترتیب، انتظار می‌رود کتابخانه‌هایی در PyPI برای انتزاع‌های سطح بالا بر فراز مفسرها پدیدار شوند.

در مورد ماژول‌های توسعه‌ای، کار برای به‌روزرسانی برخی پروژه‌های PyPI و همچنین ابزارهایی مانند Cython، pybind11، nanobind و PyO3 در جریان است. مراحل جداسازی یک ماژول توسعه‌ای در جداسازی ماژول‌های توسعه آمده است. جداسازی یک ماژول با آنچه برای پشتیبانی از نخ‌بندی آزاد لازم است، همپوشانی زیادی دارد؛ بنابراین کارهای جاری کامیونیتی در این حوزه به تسریع پشتیبانی از مفسرهای متعدد کمک خواهد کرد.

همچنین در 3.14 افزوده شد: concurrent.futures.InterpreterPoolExecutor.

(مشارکت‌شده توسط اریک اسنو در gh-134939.)

همچنین ملاحظه نمائید

PEP 734

PEP 750: مقادیر لفظی رشته قالبی

رشته‌های قالبی سازوکار جدیدی برای پردازش سفارشی رشته‌ها هستند. آن‌ها سینتکس آشنای اف‌استرینگ‌ها را به اشتراک می‌گذارند، اما برخلاف اف‌استرینگ‌ها، به‌جای یک str ساده، شیئی را برمی‌گردانند که بخش‌های ایستا و درون‌یابی‌شده‌ی رشته را نمایندگی می‌کند.

برای نوشتن یک تی‌استرینگ، به‌جای پیشوند 'f' از پیشوند 't' استفاده کنید:

>>> variety = 'Stilton'
>>> template = t'Try some {variety} cheese!'
>>> type(template)
<class 'string.templatelib.Template'>

اشیاء Template دسترسی به بخش‌های ایستا و درون‌یابی‌شده (درون آکولادها) یک رشته را پیش از ترکیب شدن آن‌ها فراهم می‌کنند. برای دسترسی به بخش‌هایشان به ترتیب، روی نمونه‌های Template پیمایش کنید:

>>> list(template)
['Try some ', Interpolation('Stilton', 'variety', None, ''), ' cheese!']

نوشتن (یا فراخوانی) کد برای پردازش نمونه‌های Template آسان است. برای مثال، تابع زیر بخش‌های ایستا را با حروف کوچک و نمونه‌های Interpolation را با حروف بزرگ رندر می‌کند:

from string.templatelib import Interpolation

def lower_upper(template):
    """Render static parts lowercase and interpolations uppercase."""
    parts = []
    for part in template:
        if isinstance(part, Interpolation):
            parts.append(str(part.value).upper())
        else:
            parts.append(part.lower())
    return ''.join(parts)

name = 'Wenslydale'
template = t'Mister {name}'
assert lower_upper(template) == 'mister WENSLYDALE'

از آنجا که نمونه‌های Template در زمان اجرا بین رشته‌های ایستا و درون‌یابی‌ها تمایز قائل می‌شوند، می‌توانند برای پاکسازی ورودی کاربر مفید باشند. نوشتن تابع html() که ورودی کاربر را در HTML خنثی کند، تمرینی است که به خواننده واگذار می‌شود! کد پردازش قالب می‌تواند انعطاف‌پذیری بهتری فراهم کند. برای نمونه، تابع html() پیشرفته‌تری می‌تواند یک dict از ویژگی‌های HTML را مستقیماً در قالب بپذیرد:

attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}
template = t'<img {attributes}>'
assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'

البته، کد پردازش قالب لازم نیست نتیجه‌ای شبه‌رشته را بازگرداند. یک html() حتی پیشرفته‌تر می‌تواند نوعی سفارشی را بازگرداند که ساختاری شبه‌DOM را نمایندگی می‌کند.

با وجود تی‌استرینگ‌ها، توسعه‌دهندگان می‌توانند سیستم‌هایی بنویسند که SQL را پاک‌سازی کنند، عملیات پوسته را به‌صورت امن انجام دهند، گزارش‌گیری را بهبود بخشند، به ایده‌های مدرن در توسعه وب (HTML، CSS و غیره) بپردازند و زبان‌های اختصاصی دامنه (DSL) سبک‌وزن و سفارشی کسب‌وکار را پیاده‌سازی کنند.

(مشارکت‌شده توسط Jim Baker، Guido van Rossum، Paul Everitt، Koudai Aono، Lysandros Nikolaou، Dave Peck، Adam Turner، Jelle Zijlstra، Bénédikt Tran و Pablo Galindo Salgado در gh-132661.)

همچنین ملاحظه نمائید

PEP 750.

PEP 768: رابط امن اشکال‌زدای خارجی

پایتون 3.14 یک رابط اشکال‌زدایی بدون سربار معرفی می‌کند که به اشکال‌زداها و پروفایل‌گیرها اجازه می‌دهد تا به‌طور ایمن به فرایندهای در حال اجرای پایتون متصل شوند، بدون توقف یا راه‌اندازی مجدد آن‌ها. این ارتقای قابل توجهی در قابلیت‌های اشکال‌زدایی پایتون است، به این معنا که دیگر نیازی به جایگزین‌های ناامن نیست.

رابط جدید نقاط اجرای امن را برای اتصال کد اشکال‌زدا فراهم می‌کند، بدون آنکه مسیر اجرای عادی مفسر را تغییر دهد یا هیچ سرباری در ران‌تایم ایجاد کند. به همین دلیل، ابزارها اکنون می‌توانند برنامه‌های پایتون را به‌صورت بلادرنگ بررسی کرده و با آن‌ها تعامل کنند؛ این قابلیتی حیاتی برای سیستم‌های با دسترسی‌پذیری بالا و محیط‌های تولید است.

برای سهولت، این رابط در تابع sys.remote_exec() پیاده‌سازی شده است. برای مثال:

import sys
from tempfile import NamedTemporaryFile

with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
    script_path = f.name
    f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')

# Execute in process with PID 1234
print('Behold! An offering:')
sys.remote_exec(1234, script_path)

این تابع امکان ارسال کد پایتون به یک فرایند هدف را فراهم می‌کند تا در نقطه اجرای ایمن بعدی اجرا شود. با این حال، نویسندگان ابزار همچنین می‌توانند پروتکل را مستقیماً همان‌طور که در PEP توضیح داده شده پیاده‌سازی کنند؛ این PEP سازوکارهای زیرین مورد استفاده برای اتصال ایمن به فرایندهای در حال اجرا را تشریح می‌کند.

رابط اشکال‌زدایی با در نظر گرفتن امنیت، با دقت طراحی شده است و شامل چندین سازوکار برای کنترل دسترسی است:

(مشارکت‌شده توسط پابلو گالیندو سالگادو، مت وازنیسکی و ایوونا استویانوویچ در gh-131591.)

همچنین ملاحظه نمائید

PEP 768.

نوع جدیدی از مفسر

نوع جدیدی از مفسر به سی‌پایتون افزوده‌شده است. این مفسر به‌جای یک دستور case بزرگ در C، از فراخوانی‌های دمی بین توابع کوچک C که آپ‌کد‌های منفرد پایتون را پیاده‌سازی می‌کنند، استفاده می‌کند. برای برخی از کامپایلرهای جدیدتر، این مفسر کارایی به‌مراتب بهتری فراهم می‌کند. بنچمارک‌های اولیه نشان می‌دهند که بسته به سکو و معماری، میانگین هندسی افزایش سرعت در بدنه بنچمارک استاندارد pyperformance برابر با ۳ تا ۵ درصد است. خط پایه، Python 3.14 است که با Clang 19 و بدون این مفسر جدید ساخته‌شده است.

این مفسر در حال حاضر فقط با Clang 19 و نسخه‌های جدیدتر روی معماری‌های x86-64 و AArch64 کار می‌کند. با این حال، انتظار می‌رود یک نسخه‌ی آینده از GCC نیز از آن پشتیبانی کند.

این قابلیت فعلاً به‌صورت اختیاری (opt-in) است. هنگام استفاده از مفسر جدید، فعال کردن بهینه‌سازی هدایت‌شده با پروفایل (profile-guided optimization) به‌شدت توصیه می‌شود، زیرا این تنها پیکربندی‌ای است که برای بهبود کارایی آزمایش و اعتبارسنجی شده است. برای اطلاعات بیشتر، --with-tail-call-interp را ببینید.

توجه

این نباید با بهینه‌سازی فراخوانی دنباله‌ای (tail call optimization) توابع پایتون اشتباه گرفته شود؛ این بهینه‌سازی در حال حاضر در سی‌پایتون پیاده‌سازی نشده است.

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

(با مشارکت Ken Jin در gh-128563، همراه با ایده‌هایی درباره‌ی نحوه‌ی پیاده‌سازی این مورد در سی‌پایتون از سوی Mark Shannon، Garrett Gu، Haoran Xu و Josh Haberman.)

بهبودهای حالت نخ‌آزاد

حالت نخ‌آزاد سی‌پایتون (PEP 703) که نخستین‌بار در 3.13 اضافه شد، در پایتون 3.14 به‌طور قابل توجهی بهبود یافته است. پیاده‌سازی توصیف‌شده در PEP 703، از جمله تغییرات در C API، تکمیل شده است و راهکارهای موقت در مفسر با راهکارهای پایدارتر جایگزین شدند. مفسر تطبیقی تخصص‌ساز (PEP 659) اکنون در حالت نخ‌آزاد فعال شده است که در کنار بسیاری از بهینه‌سازی‌های دیگر، کارایی آن را به‌طور چشمگیری بهبود می‌بخشد. افت کارایی کد تک‌نخی در حالت نخ‌آزاد اکنون، بسته به پلتفرم و کامپایلر C استفاده‌شده، حدود ۵ تا ۱۰ درصد است.

از پایتون 3.14 به بعد، هنگام کامپایل کردن ماژول‌های توسعه‌ای برای نسخه‌ی نخ‌آزاد سی‌پایتون در ویندوز، متغیر پیش‌پردازنده‌ی Py_GIL_DISABLED اکنون باید توسط بک‌اند ساخت مشخص شود، زیرا دیگر به‌طور خودکار توسط کامپایلر C تعیین نخواهد شد. برای یک مفسر در حال اجرا، می‌توان تنظیمی را که در زمان کامپایل استفاده شده است، از طریق sysconfig.get_config_var() پیدا کرد.

پرچم جدید -X context_aware_warnings کنترل می‌کند که آیا کنترل هم‌زمان‌ایمن هشدارها فعال است یا خیر. مقدار پیش‌فرض این پرچم برای ساخت‌ نخ‌آزاد true و برای ساخت‌ دارای قفل مفسر سراسری false است.

پرچم جدید thread_inherit_context افزوده شده است که در صورت فعال بودن، به این معناست که نخ‌هایی که با threading.Thread ایجاد می‌شوند، با رونوشتی از Context() فراخوان‌کننده‌ی start() آغاز می‌شوند. مهم‌تر از همه، این امر باعث می‌شود زمینه‌ی فیلتر کردن هشدار که توسط catch_warnings برقرار شده است، توسط نخ‌ها (یا وظیفه‌های asyncio) که در آن زمینه آغاز شده‌اند «به ارث برده شود». این پرچم بر ماژول‌های دیگری که از متغیرهای زمینه استفاده می‌کنند نیز اثر می‌گذارد، مانند مدیر زمینه‌ی decimal. مقدار پیش‌فرض این پرچم در ساخت‌ نخ‌آزاد true و در ساخت‌ دارای قفل مفسر سراسری false است.

(با مشارکت Sam Gross، Matt Page، Neil Schemenauer، Thomas Wouters، Donghee Na، Kirill Podoprigora، Ken Jin، Itamar Oren، Brett Simmers، Dino Viehland، Nathan Goldbaum، Ralf Gommers، Lysandros Nikolaou، Kumar Aditya، Edgar Margffoy و بسیاری دیگر. برخی از این مشارکت‌کنندگان در استخدام متا هستند؛ شرکتی که همچنان منابع مهندسی قابل‌توجهی برای پشتیبانی از این پروژه فراهم کرده است.)

پیام‌های خطای بهبودیافته

  • مفسر اکنون هنگام تشخیص غلط‌های تایپی در کلیدواژه‌های پایتون، پیشنهادهای مفیدی ارائه می‌دهد. هنگامی که با واژه‌ای مواجه شود که شباهت نزدیکی به یک کلیدواژه‌ی پایتون دارد، مفسر کلیدواژه‌ی درست را در پیام خطا پیشنهاد می‌کند. این قابلیت به برنامه‌نویسان کمک می‌کند تا اشتباهات تایپی رایج را به‌سرعت شناسایی و برطرف کنند. برای مثال:

    >>> whille True:
    ...     pass
    Traceback (most recent call last):
      File "<stdin>", line 1
        whille True:
        ^^^^^^
    SyntaxError: invalid syntax. Did you mean 'while'?
    

    هرچند این ویژگی بر رایج‌ترین موارد تمرکز دارد، ممکن است برخی گونه‌های غلط‌های املایی همچنان به خطاهای سینتکس معمولی منجر شوند. (مشارکت‌شده توسط Pablo Galindo در gh-132449.)

  • دستورهای elif که پس از یک بلوک else قرار می‌گیرند، اکنون پیام خطای اختصاصی دارند. (مشارکت‌شده توسط استیل فارنزورث در gh-129902.)

    >>> if who == "me":
    ...     print("It's me!")
    ... else:
    ...     print("It's not me!")
    ... elif who is None:
    ...     print("Who is it?")
    File "<stdin>", line 5
      elif who is None:
      ^^^^
    SyntaxError: 'elif' block follows an 'else' block
    
  • اگر دستوری پس از else به عبارات شرطی گذرانده شود، یا یکی از pass، break یا continue پیش از if گذرانده شود، پیام خطا محلی را که expression در آن لازم است برجسته می‌کند. (مشارکت Sergey Miryanov در gh-129515.)

    >>> x = 1 if True else pass
    Traceback (most recent call last):
      File "<string>", line 1
        x = 1 if True else pass
                           ^^^^
    SyntaxError: expected expression after 'else', but statement is given
    
    >>> x = continue if True else break
    Traceback (most recent call last):
      File "<string>", line 1
        x = continue if True else break
            ^^^^^^^^
    SyntaxError: expected expression before 'if', but statement is given
    
  • هنگامی که رشته‌های به‌نادرستی بسته‌شده تشخیص داده شوند، پیام خطا پیشنهاد می‌کند که ممکن است رشته به‌عنوان بخشی از رشته در نظر گرفته شده باشد. (مشارکت‌شده توسط Pablo Galindo در gh-88535.)

    >>> "The interesting object "The important object" is very important"
    Traceback (most recent call last):
    SyntaxError: invalid syntax. Is this intended to be part of the string?
    
  • هنگامی که رشته‌ها پیشوندهای ناسازگار داشته باشند، خطا اکنون نشان می‌دهد که کدام پیشوندها ناسازگار هستند. (مشارکت نیکیتا سوبولف در gh-133197.)

    >>> ub'abc'
      File "<python-input-0>", line 1
        ub'abc'
        ^^
    SyntaxError: 'u' and 'b' prefixes are incompatible
    
  • بهبود پیام‌های خطا هنگام استفاده از as با مقصد‌های ناسازگار در:

    • ایمپورت‌ها: import ... as ...

    • ایمپورت‌های from: from ... import ... as ...

    • هندلرهای except: except ... as ...

    • حالت‌های تطبیق الگو: case ... as ...

    (مشارکت‌شده توسط نیکیتا سوبولف در gh-123539، gh-123562 و gh-123440.)

  • پیام خطا هنگام تلاش برای افزودن نمونه‌ای از یک نوع هش‌ناپذیر به dict یا set بهبود یافت. (مشارکت‌شده توسط CF Bolz-Tereick و Victor Stinner در gh-132828.)

    >>> s = set()
    >>> s.add({'pages': 12, 'grade': 'A'})
    Traceback (most recent call last):
      File "<python-input-1>", line 1, in <module>
        s.add({'pages': 12, 'grade': 'A'})
        ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: cannot use 'dict' as a set element (unhashable type: 'dict')
    >>> d = {}
    >>> l = [1, 2, 3]
    >>> d[l] = 12
    Traceback (most recent call last):
      File "<python-input-4>", line 1, in <module>
        d[l] = 12
        ~^^^
    TypeError: cannot use 'list' as a dict key (unhashable type: 'list')
    
  • پیام خطا هنگامی که شیئی که از پروتکل مدیر زمینه همگام پشتیبانی می‌کند با async with به جای with وارد می‌شود، و بالعکس برای پروتکل مدیر زمینه ناهمگام، بهبود یافت. (مشارکت Bénédikt Tran در gh-128398.)

PEP 784: پشتیبانی از Zstandard در کتابخانه استاندارد

The new compression package contains modules compression.lzma, compression.bz2, compression.gzip and compression.zlib which re-export the lzma, bz2, gzip and zlib modules respectively. The new import names under compression are the preferred names for importing these compression modules from Python 3.14. However, the existing modules names have not been deprecated. Any deprecation or removal of the existing compression modules will occur no sooner than five years after the release of 3.14.

The new compression.zstd module provides compression and decompression APIs for the Zstandard format via bindings to Meta's zstd library. Zstandard is a widely adopted, highly efficient, and fast compression format. In addition to the APIs introduced in compression.zstd, support for reading and writing Zstandard compressed archives has been added to the tarfile, zipfile, and shutil modules.

در اینجا مثالی از استفاده از ماژول جدید برای فشرده‌سازی برخی داده‌ها آمده است:

from compression import zstd
import math

data = str(math.pi).encode() * 20
compressed = zstd.compress(data)
ratio = len(compressed) / len(data)
print(f"Achieved compression ratio of {ratio}")

همان‌طور که می‌بینید، API شبیه به API‌های ماژول‌های lzma و bz2 است.

(مشارکت‌شده توسط Emma Harper Smith، Adam Turner، Gregory P. Smith، Tomas Roun، Victor Stinner و Rogdham در gh-132983.)

همچنین ملاحظه نمائید

PEP 784.

قابلیت‌های درون‌نگری asyncio

رابط خط فرمان جدیدی برای بررسی فرایندهای در حال اجرای پایتون با استفاده از وظایف ناهمگام اضافه شد که از طریق python -m asyncio ps PID یا python -m asyncio pstree PID در دسترس است.

زیرفرمان ps شناسه‌ی فرایند (PID) داده‌شده را بررسی می‌کند و اطلاعاتی درباره‌ی وظایف asyncio در حال اجرا نمایش می‌دهد. این زیرفرمان یک جدول وظایف را خروجی می‌دهد: فهرستی تخت از همه‌ی وظایف، نام‌های آن‌ها، پشته‌های هم‌روال آن‌ها، و اینکه کدام وظایف در انتظار آن‌ها هستند.

زیرفرمان pstree همان اطلاعات را بازیابی می‌کند، اما به‌جای آن یک درخت بصری از فراخوانی‌های ناهمگام ترسیم می‌کند که روابط میان هم‌روال‌ها را در قالبی سلسله‌مراتبی نشان می‌دهد. این فرمان به‌طور خاص برای اشکال‌زدایی برنامه‌های ناهمگامِ طولانی‌مدت یا گیرکرده مفید است. این فرمان به توسعه‌دهندگان کمک می‌کند تا به‌سرعت تشخیص دهند که برنامه در کجا مسدود شده است، چه وظایفی در انتظار هستند و هم‌روال‌ها چگونه به یکدیگر زنجیر شده‌اند.

برای مثال، با فرض این کد:

import asyncio

async def play_track(track):
    await asyncio.sleep(5)
    print(f'🎵 Finished: {track}')

async def play_album(name, tracks):
    async with asyncio.TaskGroup() as tg:
        for track in tracks:
            tg.create_task(play_track(track), name=track)

async def main():
    async with asyncio.TaskGroup() as tg:
        tg.create_task(
          play_album('Sundowning', ['TNDNBTG', 'Levitate']),
          name='Sundowning')
        tg.create_task(
          play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
          name='TMBTE')

if __name__ == '__main__':
    asyncio.run(main())

اجرای ابزار جدید بر روی فرایند در حال اجرا، جدولی مانند این تولید خواهد کرد:

python -m asyncio ps 12345

tid        task id              task name            coroutine stack                                    awaiter chain                                      awaiter name    awaiter id
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1935500    0x7fc930c18050       Task-1               TaskGroup._aexit -> TaskGroup.__aexit__ -> main                                                                       0x0
1935500    0x7fc930c18230       Sundowning           TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
1935500    0x7fc93173fa50       TMBTE                TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
1935500    0x7fc93173fdf0       TNDNBTG              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
1935500    0x7fc930d32510       Levitate             sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
1935500    0x7fc930d32890       DYWTYLM              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50
1935500    0x7fc93161ec30       Aqua Regia           sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50

یا درختی مانند این:

python -m asyncio pstree 12345

└── (T) Task-1
    └──  main example.py:13
        └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
            └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                ├── (T) Sundowning
                   └──  album example.py:8
                       └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                           └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                               ├── (T) TNDNBTG
                                  └──  play example.py:4
                                      └──  sleep Lib/asyncio/tasks.py:702
                               └── (T) Levitate
                                   └──  play example.py:4
                                       └──  sleep Lib/asyncio/tasks.py:702
                └── (T) TMBTE
                    └──  album example.py:8
                        └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                            └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                                ├── (T) DYWTYLM
                                   └──  play example.py:4
                                       └──  sleep Lib/asyncio/tasks.py:702
                                └── (T) Aqua Regia
                                    └──  play example.py:4
                                        └──  sleep Lib/asyncio/tasks.py:702

اگر چرخه‌ای در گراف await ناهمگام شناسایی شود (که می‌تواند نشان‌دهنده‌ی یک مشکل برنامه‌نویسی باشد)، ابزار خطا ایجاد می‌کند و مسیرهای چرخه‌ای که از ساخت درخت جلوگیری می‌کنند را فهرست می‌کند:

python -m asyncio pstree 12345

ERROR: await-graph contains cycles - cannot print a tree!

cycle: Task-2  Task-3  Task-2

(مشارکت‌شده توسط پابلو گالیندو، ووکاش لانگا، یوری سلیوانوف و مارتا گومز ماسیاس در gh-91048.)

کنترل همزمان‌ایمن هشدارها

مدیر زمینه‌ی warnings.catch_warnings اکنون به‌صورت اختیاری از یک متغیر زمینه برای فیلترهای هشدار استفاده می‌کند. این قابلیت با تنظیم پرچم context_aware_warnings، از طریق گزینه‌ی خط فرمان -X یا یک متغیر محیطی فعال می‌شود. این امر کنترل قابل پیش‌بینی هشدارها را هنگام استفاده از catch_warnings در ترکیب با چندین نخ یا وظایف ناهمگام فراهم می‌کند. مقدار پیش‌فرض این پرچم در نسخه‌ی نخ‌آزاد true و در نسخه‌ی دارای قفل مفسر سراسری false است.

(مشارکت‌شده توسط Neil Schemenauer و Kumar Aditya در gh-130010.)

سایر تغییرات زبان

  • اکنون همه صفحه‌های کد ویندوز به‌صورت کدک‌های 'cpXXX' در ویندوز پشتیبانی می‌شوند. (مشارکت Serhiy Storchaka در gh-123803.)

  • پیاده‌سازی قواعد حساب ترکیبی (mixed-mode arithmetic) میان اعداد حقیقی و مختلط، مطابق با آنچه استاندارد C از C99 به بعد مشخص کرده است. (با مشارکت Sergey B Kirpichev در gh-69639.)

  • اکنون خطاهای نحوی بیشتری صرف‌نظر از بهینه‌سازی و گزینه‌ی خط فرمان -O تشخیص داده می‌شوند. این شامل نوشتن در __debug__، استفاده‌ی نادرست از await، و درک‌های ناهمگام خارج از توابع ناهمگام است. برای مثال، python -O -c 'assert (__debug__ := 1)' یا python -O -c 'assert await 1' اکنون SyntaxError تولید می‌کنند. (مشارکت‌شده توسط Irit Katriel و Jelle Zijlstra در gh-122245 و gh-121637.)

  • هنگام زیرکلاس‌سازی یک نوع C خالص، جایگاه‌های C برای نوع جدید دیگر هنگام ایجاد کلاس با نسخه‌ی پوششی جایگزین نمی‌شوند، مگر آنکه به‌طور صریح در زیرکلاس بازنویسی شده باشند. (مشارکت‌شده توسط Tomasz Pytel در gh-132284.)

توکارها

  • متدهای bytes.fromhex() و bytearray.fromhex() اکنون bytes اسکی و اشیاء شبه‌بایت را می‌پذیرند. (مشارکت‌شده توسط Daniel Pope در gh-129349.)

  • افزودن متدهای کلاس float.from_number() و complex.from_number() برای تبدیل یک عدد به‌طور متناظر به نوع float یا complex. این متدها در صورتی که آرگومان یک عدد حقیقی نباشد، TypeError ایجاد می‌کنند. (مشارکت‌شده توسط Serhiy Storchaka در gh-84978.)

  • پشتیبانی از زیرخط و ویرگول به‌عنوان جداکننده‌های هزارگان در بخش کسری برای انواع نمایش ممیز شناور در قالب‌بندی رشته‌ی سبک جدید (با format() یا اف‌استرینگ‌ها). (مشارکت‌شده توسط سرگئی بی. کیرپیچف در gh-87790.)

  • تابع int() دیگر به __trunc__() واگذار نمی‌کند. کلاس‌هایی که می‌خواهند از تبدیل به int() پشتیبانی کنند، باید __int__() یا __index__() را پیاده‌سازی کنند. (مشارکت‌شده توسط Mark Dickinson در gh-119743.)

  • تابع map() اکنون مانند zip() یک پرچم اختیاریِ فقط‌کلیدواژه‌ای strict دارد که بررسی می‌کند همه‌ی پیمایش‌پذیرها طول برابر داشته باشند. (ارائه‌شده توسط Wannes Boeykens در gh-119793.)

  • نوع memoryview اکنون از زیرنویسی پشتیبانی می‌کند و به یک نوع عام تبدیل می‌شود. (مشارکت‌شده توسط Brian Schubert در gh-126012.)

  • استفاده از NotImplemented در یک زمینه بولی اکنون باعث ایجاد TypeError می‌شود. این مورد از پایتون 3.9 یک DeprecationWarning ایجاد می‌کرد. (مشارکت‌شده توسط Jelle Zijlstra در gh-118767.)

  • pow() سه‌آرگومنی اکنون در صورت لزوم تلاش می‌کند __rpow__() را فراخوانی کند. پیش‌تر این متد فقط در pow() دوآرگومنی و عملگر دودویی توان فراخوانی می‌شد. (مشارکت‌شده توسط Serhiy Storchaka در gh-130104.)

  • اشیای super اکنون کپی‌پذیر و پیکل‌پذیر هستند. (مشارکت Serhiy Storchaka در gh-125767.)

خط فرمان و محیط

  • پرچم زمان ایمپورت اکنون می‌تواند از طریق -X importtime=2 جدید، ماژول‌هایی را که از قبل بارگذاری شده‌اند ('cached') پیگیری کند. هنگامی که چنین ماژولی ایمپورت می‌شود، زمان‌های self و cumulative با رشته‌ی cached جایگزین می‌شوند.

    مقادیر بالاتر از 2 برای -X importtime اکنون برای استفاده در آینده رزرو شده‌اند.

    (با مشارکت Noah Kim و Adam Turner در gh-118655.)

  • گزینه‌ی خط فرمان -c اکنون پیش از اجرا، آرگومان کد خود را به‌طور خودکار حذف تورفتگی (dedent) می‌کند. رفتار حذف تورفتگی خودکار مشابه textwrap.dedent() است. (مشارکت‌شده توسط Jon Crall و Steven Sun در gh-103998.)

  • پرچم -J دیگر برای Jython رزرو‌شده نیست و اکنون معنای خاصی ندارد. (مشارکت‌شده توسط Adam Turner در gh-133336.)

PEP 758: اجازه دادن به عبارت‌های except و except* بدون پرانتز

عبارت‌های except و except* اکنون اجازه می‌دهند که در صورت وجود چندین نوع استثنا و عدم استفاده از بند as، پرانتزها حذف شوند. برای مثال:

try:
    connect_to_server()
except TimeoutError, ConnectionRefusedError:
    print('The network has ceased to be!')

(مشارکت‌شده توسط پابلو گالیندو و برت کانون در PEP 758 و gh-131831.)

PEP 765: جریان کنترل در بلوک‌های finally

کامپایلر اکنون هنگامی که دستور return، break یا continue باعث خروج از بلوک finally می‌شود، SyntaxWarning منتشر می‌کند. این تغییر در PEP 765 مشخص شده است.

در موقعیت‌هایی که این تغییر ناخوشایند است (مانند مواردی که هشدارها به‌دلیل لینت‌کردن کد (code linting) زائد هستند)، می‌توان با افزودن ignore::SyntaxWarning به‌عنوان یک فیلتر، از فیلتر هشدار برای غیرفعال کردن تمام هشدارهای سینتکس استفاده کرد. این را می‌توان در ترکیب با فیلتری که هشدارهای دیگر را به خطا تبدیل می‌کند، مشخص کرد (برای مثال، ارسال -Werror -Wignore::SyntaxWarning به‌عنوان گزینه‌های CLI، یا تنظیم PYTHONWARNINGS=error,ignore::SyntaxWarning).

توجه داشته باشید که اعمال چنین فیلتری در زمان اجرا با استفاده از ماژول warnings تنها هشدار را در کدی که پس از تنظیم فیلتر کامپایل می‌شود سرکوب خواهد کرد. کدی که پیش از تنظیم فیلتر کامپایل شده است (برای مثال، زمانی که یک ماژول ایمپورت می‌شود) همچنان هشدار سینتکس را منتشر خواهد کرد.

(مشارکت‌شده توسط ایریت کاتریل در gh-130080.)

زباله‌روبی

از پایتون 3.14.5 به بعد:

زباله‌روب (GC) در پایتون 3.14.5 تغییر کرده است.

پایتون 3.14.0-3.14.4 به همراه یک زباله‌روب افزایشی (incremental GC) جدید عرضه شد. با این حال، به دلیل تعدادی گزارش از فشار قابل توجه بر حافظه در محیط‌های عملیاتی، به زباله‌روب نسلی (generational GC) نسخه‌ی 3.13 بازگردانده شد. این همان زباله‌روب است که اکنون در پایتون 3.14.5 و نسخه‌های بعدی استفاده می‌شود.

پیش‌تر در پایتون 3.14.0-3.14.4:

زباله‌روب چرخه‌ای اکنون افزایشی است. این بدان معناست که بیشینه زمان‌های مکث برای هیپ‌های بزرگ‌تر به میزان یک مرتبه بزرگی یا بیشتر کاهش می‌یابد.

اکنون فقط دو نسل وجود دارد: جوان و پیر. وقتی gc.collect() مستقیماً فراخوانی نشود، زباله‌روب کمی کمتر فراخوانی می‌شود. هنگام فراخوانی، به‌جای جمع‌آوری یک یا چند نسل، نسل جوان و بخشی از نسل پیر را جمع‌آوری می‌کند.

رفتار gc.collect() کمی تغییر می‌کند:

  • gc.collect(1): یک مرحله از زباله‌روبی را انجام می‌دهد، نه اینکه نسل ۱ را جمع‌آوری کند.

  • سایر فراخوانی‌های gc.collect() بدون تغییر باقی می‌مانند.

(مشارکت Mark Shannon در gh-108362.)

پوسته تعاملی پیش‌فرض

  • پوسته‌ی interactive پیش‌فرض اکنون سینتکس پایتون را برجسته‌سازی می‌کند. این قابلیت به‌طور پیش‌فرض فعال است، مگر اینکه PYTHON_BASIC_REPL یا هر متغیر محیطی دیگری که رنگ را غیرفعال می‌کند تنظیم شده باشد. برای جزئیات به کنترل رنگ مراجعه کنید.

    تم رنگی پیش‌فرض برجسته‌سازی سینتکس می‌کوشد کنتراست خوبی داشته باشد و برای حداکثر سازگاری، تنها از کدهای رنگ ANSI استاندارد VGA چهاربیتی استفاده می‌کند. این تم را می‌توان با استفاده از یک API آزمایشی _colorize.set_theme() سفارشی‌سازی کرد. این تابع را می‌توان به‌صورت تعاملی یا در اسکریپت PYTHONSTARTUP فراخوانی کرد. توجه داشته باشید که این تابع هیچ تضمینی برای پایداری ندارد و ممکن است تغییر کند یا حذف شود.

    (مشارکت Łukasz Langa در gh-131507.)

  • پوسته‌ی interactive پیش‌فرض اکنون از تکمیل خودکار ایمپورت پشتیبانی می‌کند. این بدان معناست که با تایپ کردن import co و فشار دادن کلید <Tab>، ماژول‌هایی که با co شروع می‌شوند پیشنهاد می‌شوند. به‌طور مشابه، با تایپ کردن from concurrent import i، زیرماژول‌های concurrent که با i شروع می‌شوند پیشنهاد می‌شوند. توجه داشته باشید که تکمیل خودکار ویژگی‌های ماژول در حال حاضر پشتیبانی نمی‌شود. (مشارکت Tomas Roun در gh-69605.)

ماژول‌های جدید

  • annotationlib: برای درون‌نگری حاشیه‌نویسی‌ها. برای جزئیات بیشتر به PEP 749 مراجعه کنید. (مشارکت‌شده توسط Jelle Zijlstra در gh-119180.)

  • compression (شامل compression.zstd): بسته‌ای برای ماژول‌های مرتبط با فشرده‌سازی، از جمله ماژول جدیدی برای پشتیبانی از قالب فشرده‌سازی Zstandard. برای جزئیات بیشتر به PEP 784 مراجعه کنید. (با مشارکت Emma Harper Smith، Adam Turner، Gregory P. Smith، Tomas Roun، Victor Stinner و Rogdham در gh-132983.)

  • concurrent.interpreters: پشتیبانی از چندین مفسر در کتابخانه استاندارد. برای جزئیات بیشتر به PEP 734 مراجعه کنید. (مشارکت‌شده توسط Eric Snow در gh-134939.)

  • string.templatelib: پشتیبانی از رشته‌های لفظی قالبی (تی‌استرینگ‌ها). برای جزئیات بیشتر به PEP 750 مراجعه کنید. (مشارکت‌شده توسط Jim Baker، Guido van Rossum، Paul Everitt، Koudai Aono، Lysandros Nikolaou، Dave Peck، Adam Turner، Jelle Zijlstra، Bénédikt Tran و Pablo Galindo Salgado در gh-132661.)

ماژول‌های بهبودیافته

argparse

  • مقدار پیش‌فرض نام برنامه برای argparse.ArgumentParser اکنون نحوه‌ی دستور داده‌شده به مفسر پایتون برای یافتن کد ماژول __main__ را بازتاب می‌دهد. (مشارکت‌شده توسط Serhiy Storchaka و Alyssa Coghlan در gh-66436.)

  • پارامتر اختیاری suggest_on_error در argparse.ArgumentParser معرفی شد که در صورت اشتباه تایپی از سوی کاربر، پیشنهادهایی برای گزینه‌های آرگومان و نام‌های زیرپارسر ارائه می‌دهد. (مشارکت‌شده توسط Savannah Ostrowski در gh-124456.)

  • فعال‌سازی رنگ برای متن راهنما، که می‌توان آن را با پارامتر اختیاری color در argparse.ArgumentParser غیرفعال کرد. این قابلیت را می‌توان از طریق متغیرهای محیطی نیز کنترل کرد. (مشارکت‌شده توسط هوگو ون کمِناده در gh-130645.)

ast

  • افزودن compare()، تابعی برای مقایسه‌ی دو AST. (با مشارکت Batuhan Taskaya و Jeremy Hylton در gh-60191.)

  • افزودن پشتیبانی از copy.replace() برای گره‌های AST. (مشارکت Bénédikt Tran در gh-121141.)

  • رشته‌های مستند اکنون در سطح بهینه‌سازی ۲ از یک AST بهینه‌شده حذف می‌شوند. (مشارکت‌شده توسط Irit Katriel در gh-123958.)

  • خروجی repr() برای گره‌های AST اکنون شامل اطلاعات بیشتری است. (مشارکت: Tomas Roun در gh-116022.)

  • هنگامی که با یک درخت سینتکس انتزاعی (AST) به‌عنوان ورودی فراخوانی شود، تابع parse() اکنون همیشه بررسی می‌کند که نوع گره ریشه مناسب باشد. (ارائه‌شده توسط Irit Katriel در gh-130139.)

  • افزودن گزینه‌های جدید به رابط خط فرمان: --feature-version، --optimize و --show-empty. (مشارکت‌شده توسط Semyon Moroz در gh-133367.)

asyncio

  • تابع و متد‌هایی که create_task() نام دارند، اکنون فهرست دلخواهی از آرگومان‌های کلیدواژه‌ای را می‌پذیرند. تمام آرگومان‌های کلیدواژه‌ای به سازنده‌ی Task یا کارخانه وظیفه سفارشی منتقل می‌شوند. (برای جزئیات به set_task_factory() مراجعه کنید.) آرگومان‌های کلیدواژه‌ای name و context دیگر ویژه نیستند؛ نام باید اکنون با استفاده از آرگومان کلیدواژه‌ای name کارخانه تنظیم شود و context می‌تواند None باشد.

    این بر تابع و متدهای زیر تأثیر می‌گذارد: asyncio.create_task()، asyncio.loop.create_task()، asyncio.TaskGroup.create_task().

    (با مشارکت Thomas Grainger در gh-128307.)

  • دو تابع کاربردی جدید برای درون‌نگری و چاپ گراف فراخوانی یک برنامه وجود دارد: capture_call_graph() و print_call_graph(). برای جزئیات بیشتر به قابلیت‌های درون‌نگری Asyncio مراجعه کنید. (مشارکت‌شده توسط Yury Selivanov، Pablo Galindo Salgado و Łukasz Langa در gh-91048.)

calendar

  • به‌طور پیش‌فرض، تاریخ امروز در خروجی متنی خط فرمان ماژول calendar با رنگ برجسته می‌شود. این را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت‌شده توسط هوگو ون کمِناده در gh-128317.)

concurrent.futures

  • کلاس اجراکننده‌ی جدیدی، InterpreterPoolExecutor، اضافه شده است که چندین مفسر پایتون را در یک فرایند واحد («زیرمفسرها» — subinterpreters) برای کد پایتون در دسترس قرار می‌دهد. این کلاس از یک استخر مفسرهای مستقل پایتون برای اجرای فراخوانی‌ها به‌صورت ناهمگام استفاده می‌کند.

    این مورد جدا از ماژول جدید interpreters است که توسط PEP 734 معرفی‌شده است. (مشارکت‌شده توسط Eric Snow در gh-124548.)

  • در پلتفرم‌های یونیکس به‌جز macOS، 'forkserver' اکنون متد شروع پیش‌فرض برای ProcessPoolExecutor است (جایگزین 'fork' شده است). این تغییر بر Windows یا macOS تأثیری نمی‌گذارد و در آن‌ها 'spawn' همچنان متد شروع پیش‌فرض است.

    اگر روش fork که با نخ‌بندی ناسازگار است مورد نیاز باشد، باید آن را به‌طور صریح با فراهم‌کردن یک زمینه‌ی multiprocessing به نام mp_context برای ProcessPoolExecutor درخواست کنید.

    برای اطلاعات و تفاوت‌های آن با روش فورک و همچنین برای آگاهی از اینکه این تغییر چگونه ممکن است بر کدهای موجود با متغیرهای سراسری اشتراکی تغییرپذیر و/یا اشیاء اشتراکی‌ای که نمی‌توان به‌طور خودکار آن‌ها را پیکل کرد تأثیر بگذارد، به محدودیت‌های forkserver مراجعه کنید.

    (مشارکت‌شده توسط Gregory P. Smith در gh-84559.)

  • دو متد جدید به ProcessPoolExecutor اضافه شد: terminate_workers() و kill_workers()، به‌عنوان راه‌هایی برای خاتمه دادن یا کشتن همه‌ی فرایندهای کارگر زنده در استخر داده‌شده. (مشارکت‌شده توسط Charles Machalow در gh-130849.)

  • افزودن پارامتر اختیاری buffersize به Executor.map برای محدود کردن تعداد وظایف ارسال‌شده‌ای که نتایجشان هنوز تولید نشده است. اگر بافر پر باشد، پیمایش روی iterables مکث می‌کند تا زمانی که نتیجه‌ای از بافر تولید شود. (مشارکت‌شده توسط انزو بونال و جاش روزنبرگ در gh-74028.)

configparser

  • برای بهبود امنیت، configparser دیگر پرونده‌های پیکربندی‌ای را که نمی‌تواند بخواند، نمی‌نویسد. تلاش برای write() کردن کلیدهایی که شامل جداکننده‌ها هستند یا با الگوی سرآیند بخش آغاز می‌شوند، باعث ایجاد استثنای InvalidWriteError می‌شود. (مشارکت‌شده توسط Jacob Lincoln در gh-129270.)

contextvars

ctypes

  • چیدمان فیلدهای بیتی در اشیاء Structure و Union اکنون تطابق نزدیک‌تری با پیش‌فرض‌های پلتفرم (GCC/Clang یا MSVC) دارد. به‌ویژه، فیلدها دیگر هم‌پوشانی ندارند. (با مشارکت Matthias Görgens در gh-97702.)

  • اکنون می‌توان ویژگی کلاس Structure._layout_ را برای کمک به تطبیق با رابط دودویی برنامه (ABI) غیرپیش‌فرض تنظیم کرد. (مشارکت‌شده توسط Petr Viktorin در gh-97702.)

  • کلاس توصیف‌گرهای فیلد Structure/Union اکنون به‌صورت CField در دسترس است و ویژگی‌های جدیدی برای کمک به اشکال‌زدایی و درون‌نگری درونی دارد. (مشارکت‌شده توسط Petr Viktorin در gh-128715.)

  • در ویندوز، استثنای COMError اکنون عمومی است. (مشارکت‌شده توسط Jun Komoda در gh-126686.)

  • در ویندوز، تابع CopyComPointer() اکنون عمومی است. (مشارکت‌شده توسط Jun Komoda در gh-127275.)

  • افزودن memoryview_at()، تابعی برای ایجاد شیء memoryview که به اشاره‌گر و طول ارائه‌شده ارجاع می‌دهد. این تابع مانند ctypes.string_at() کار می‌کند، با این تفاوت که از رونوشت بافر اجتناب می‌کند و به‌طور معمول هنگام پیاده‌سازی توابع کال‌بک پایتون خالصی که بافرهای با اندازه‌ی پویا به آن‌ها ارسال می‌شود، مفید است. (مشارکت‌شده توسط Rian Hunter در gh-112018.)

  • در صورتی که هم کامپایلر و هم کتابخانه‌ی libffi از نوع‌های مختلط C پشتیبانی کنند، نوع‌های مختلط c_float_complex، c_double_complex و c_longdouble_complex اکنون در دسترس هستند. (با مشارکتِ Sergey B Kirpichev در gh-61103.)

  • افزودن ctypes.util.dllist() برای فهرست کردن کتابخانه‌های اشتراکی بارگذاری‌شده توسط فرایند جاری. (مشارکت‌شده توسط Brian Ward در gh-119349.)

  • نهانگاه نوع‌های ctypes.POINTER() از یک نهانگاه داخلی سراسری (_pointer_type_cache) به ویژگی _CData.__pointer_type__ نوع‌های متناظر ctypes منتقل شد. این کار در برخی موقعیت‌ها مانع از رشد بی‌کران نهانگاه می‌شود. (مشارکت‌شده توسط سرگئی میریانوف در gh-100926.)

  • نوع py_object اکنون از زیرنویسی پشتیبانی می‌کند و در نتیجه به یک نوع عام تبدیل می‌شود. (با مشارکت Brian Schubert در gh-132168.)

  • ctypes اکنون از ساخت‌های نخ‌بندی آزاد پشتیبانی می‌کند. (مشارکت‌شده توسط Kumar Aditya و Peter Bierma در gh-127945.)

curses

datetime

decimal

  • افزودن Decimal.from_number() به‌عنوان سازنده‌ای جایگزین برای Decimal. (با مشارکت سرهی استورچاکا در gh-121798.)

  • افشای IEEEContext() برای پشتیبانی از ایجاد زمینه‌های متناظر با قالب‌های تبادلی اعشاری IEEE 754 (2008). (مشارکت‌شده توسط Sergey B Kirpichev در gh-53032.)

difflib

  • صفحات مقایسه با تغییرات برجسته‌شده که توسط کلاس HtmlDiff تولید می‌شوند، اکنون از «حالت تاریک» پشتیبانی می‌کنند. (مشارکت‌شده توسط Jiahao Li در gh-129939.)

dis

  • پشتیبانی از نمایش اطلاعات کامل مکان دستورالعمل‌ها در کد منبع، به‌جای فقط شماره سطر، اضافه شد. این قابلیت از طریق آرگومان کلیدواژه‌ای show_positions به رابط‌های زیر اضافه شده است:

    این قابلیت همچنین از طریق dis --show-positions در دسترس است. (مشارکت‌شده توسط Bénédikt Tran در gh-123165.)

  • افزودن گزینه‌ی خط فرمان dis --specialized برای نمایش بایت‌کد تخصصی‌شده. (مشارکت‌شده توسط Bénédikt Tran در gh-127413.)

errno

faulthandler

fnmatch

  • افزودن filterfalse()، تابعی برای رد کردن نام‌هایی که با الگوی داده‌شده مطابقت دارند. (مشارکت‌شده توسط Bénédikt Tran در gh-74598.)

fractions

  • اکنون می‌توان یک شیء Fraction را از هر شیء دارای متد as_integer_ratio() ساخت. (مشارکت‌شده توسط Serhiy Storchaka در gh-82017.)

  • افزودن Fraction.from_number() به‌عنوان سازنده‌ای جایگزین برای Fraction. (ارائه‌شده توسط Serhiy Storchaka در gh-121797.)

functools

  • افزودن نشانگر Placeholder. از این نشانگر می‌توان همراه با توابع partial() یا partialmethod() استفاده کرد تا مکانی برای آرگومان‌های جایگاهی در شیء پارشیال (partial) بازگردانده‌شده رزرو شود. (مشارکت‌شده توسط Dominykas Grigonis در gh-119127.)

  • پارامتر initial تابع reduce() اکنون می‌تواند به‌صورت آرگومان کلیدواژه‌ای ارسال شود. (مشارکت Sayandip Dutta در gh-125916.)

getopt

  • افزودن پشتیبانی از گزینه‌هایی با آرگومان‌های اختیاری. (مشارکت‌شده توسط Serhiy Storchaka در gh-126374.)

  • افزودن پشتیبانی از بازگرداندن گزینه‌ها و آرگومان‌های غیر از گزینه‌ها به‌صورت درهم‌آمیخته و به ترتیب. (با مشارکت Serhiy Storchaka در gh-126390.)

getpass

  • پشتیبانی از بازخورد صفحه‌کلید در تابع getpass() از طریق آرگومان اختیاریِ فقط‌کلیدواژه‌ای echo_char. نویسه‌های جای‌نگهدار هر زمان که نویسه‌ای وارد شود، نمایش داده می‌شوند و با حذف یک نویسه برداشته می‌شوند. (مشارکت‌شده توسط سمیون موروز در gh-77065.)

graphlib

  • اجازه می‌دهد TopologicalSorter.prepare() بیش از یک بار فراخوانی شود، تا زمانی که مرتب‌سازی آغاز نشده باشد. (مشارکت از Daniel Pope در gh-130914.)

heapq

hmac

  • پیاده‌سازی توکاری برای HMAC (RFC 2104) با استفاده از کد تأییدشده به‌صورت صوری از پروژه‌ی HACL* اضافه شد. این پیاده‌سازی زمانی به‌عنوان جایگزین استفاده می‌شود که پیاده‌سازی HMAC در OpenSSL دسترس‌پذیر نباشد. (مشارکت‌شده توسط Bénédikt Tran در gh-99108.)

http

  • فهرست‌های پوشه و صفحات خطای تولیدشده توسط ماژول http.server به مرورگر اجازه می‌دهند حالت تاریک پیش‌فرض خود را اعمال کند. (مشارکت‌شده توسط Yorik Hansen در gh-123430.)

  • ماژول http.server اکنون از سرویس‌دهی از طریق HTTPS با استفاده از کلاس http.server.HTTPSServer پشتیبانی می‌کند. رابط خط فرمان (python -m http.server) این قابلیت را از طریق گزینه‌های زیر در دسترس قرار می‌دهد:

    (مشارکت‌شده توسط Semyon Moroz در gh-85162.)

imaplib

  • افزودن IMAP4.idle()، که فرمان IDLE در IMAP4 را همان‌طور که در RFC 2177 تعریف شده است پیاده‌سازی می‌کند. (مشارکت Forest در gh-55454.)

inspect

  • signature() یک آرگومان جدید با نام annotation_format می‌گیرد تا annotationlib.Format مورد استفاده برای بازنمایی حاشیه‌نویسی‌ها را کنترل کند. (مشارکت‌شده توسط Jelle Zijlstra در gh-101552.)

  • Signature.format() آرگومان جدید unquote_annotations را می‌پذیرد. اگر درست باشد، حاشیه‌نویسی‌های رشته‌ای بدون علامت‌های نقل‌قول اطراف نمایش داده می‌شوند. (مشارکت‌شده توسط Jelle Zijlstra در gh-101552.)

  • تابع ispackage() برای تعیین اینکه آیا یک شیء package است یا خیر، افزوده شد. (مشارکت‌شده توسط Zhikang Yan در gh-125634.)

io

  • خواندن متن از یک جریان غیرمسدودکننده با read ممکن است اکنون در صورتی که عملیات نتواند بلافاصله بایت‌ها را بازگرداند، BlockingIOError ایجاد کند. (مشارکت‌شده توسط Giovanni Siragusa در gh-109523.)

  • پروتکل‌های Reader و Writer به‌عنوان جایگزین‌های ساده‌تری برای شبه‌پروتکل‌های typing.IO، typing.TextIO و typing.BinaryIO افزوده شدند. (مشارکت‌شده توسط سباستین ریتائو در gh-127648.)

json

  • افزودن یادداشت‌های استثنا برای خطاهای سریال‌سازی JSON که امکان شناسایی منشأ خطا را فراهم می‌کنند. (مشارکت‌شده توسط Serhiy Storchaka در gh-122163.)

  • امکان استفاده از ماژول json به‌عنوان اسکریپت از طریق سوییچ -m فراهم شد: python -m json. این روش اکنون بر python -m json.tool ترجیح دارد، که منسوخ نرم است. مستندات رابط خط فرمان JSON را ببینید. (مشارکت از سوی Trey Hunner در gh-122873.)

  • به‌طور پیش‌فرض، خروجی رابط خط فرمان JSON به‌صورت رنگی برجسته‌سازی می‌شود. این امر را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت‌شده توسط Tomas Roun در gh-131952.)

linecache

  • getline() اکنون می‌تواند کد منبع ماژول‌های فریزشده را بازیابی کند. (مشارکت‌شده توسط Tian Gao در gh-131638.)

logging.handlers

math

  • پیام‌های خطای مفصل‌تری برای خطاهای دامنه در ماژول اضافه شد. (با مشارکت Charlie Zhao و Sergey B Kirpichev در gh-101410.)

mimetypes

  • افزودن یک خط فرمان عمومی برای ماژول، که از طریق python -m mimetypes فراخوانی می‌شود. (مشارکت‌شده توسط Oleg Iarygin و Hugo van Kemenade در gh-93096.)

  • افزودن چندین نوع MIME جدید بر اساس RFC‌ها و کاربرد رایج:

    انواع MIME برای فونت‌ها از مایکروسافت و RFC 8081

    • اوپن‌تایپ تعبیه‌شده (Embedded OpenType): application/vnd.ms-fontobject

    • OpenType Layout (OTF) font/otf

    • TrueType: font/ttf

    • WOFF 1.0 font/woff

    • WOFF 2.0 font/woff2

    RFC 9559 انواع MIME برای ساختارهای ظرف داده‌های دیداری‌شنیداری Matroska

    • صدا بدون ویدیو: audio/matroska (.mka)

    • ویدیو: video/matroska (.mkv)

    • ویدئوی استریوسکوپی: video/matroska-3d (.mk3d)

    تصاویر دارای RFCها

    • RFC 1494: CCITT Group 3 (.g3)

    • RFC 3362: فکس بلادرنگ، T.38 (.t38)

    • RFC 3745: JPEG 2000 (.jp2)، توسعه‌یافته (.jpx) و ترکیبی (.jpm)

    • RFC 3950: Tag Image File Format Fax eXtended, TIFF-FX (.tfx)

    • RFC 4047: سامانه انتقال تصویر انعطاف‌پذیر (Flexible Image Transport System) (.fits)

    • RFC 7903: فراپرونده‌ی پیشرفته (Enhanced Metafile) (.emf) و فراپرونده‌ی ویندوز (Windows Metafile) (.wmf)

    سایر افزوده‌ها و تغییرات نوع MIME

    • RFC 2361: تغییر نوع برای .avi به video/vnd.avi و برای .wav به audio/vnd.wave

    • RFC 4337: افزودن MPEG-4 audio/mp4 (.m4a)

    • RFC 5334: افزودن رسانه‌ی Ogg (.oga، .ogg و .ogx)

    • RFC 6713: افزودن gzip application/gzip (.gz)

    • RFC 9639: افزودن FLAC audio/flac (.flac)

    • RFC 9512 نوع MIME application/yaml برای پرونده‌های YAML (.yaml و .yml)

    • افزودن 7z application/x-7z-compressed (.7z)

    • افزودن بسته اندروید application/vnd.android.package-archive (.apk) زمانی که strict نباشد

    • افزودن deb application/x-debian-package (.deb)

    • افزودن glTF دودویی model/gltf-binary (.glb)

    • افزودن glTF JSON/ASCII model/gltf+json (.gltf)

    • افزودن M4V video/x-m4v (.m4v)

    • افزودن PHP application/x-httpd-php (.php)

    • افزودن RAR application/vnd.rar (.rar)

    • افزودن RPM application/x-rpm (.rpm)

    • افزودن STL model/stl (.stl)

    • افزودن Windows Media Video با نوع video/x-ms-wmv (.wmv)

    • دفاکتو (De facto): افزودن WebM audio/webm (.weba)

    • ECMA-376: افزودن نوع‌های .docx، .pptx و .xlsx

    • OASIS: افزودن نوع‌های OpenDocument .odg، .odp، .ods و .odt

    • W3C: افزودن EPUB application/epub+zip (.epub)

    (با مشارکت Sahil Prajapati و Hugo van Kemenade در gh-84852، Sasha "Nelie" Chernykh و Hugo van Kemenade در gh-132056، و Hugo van Kemenade در gh-89416، gh-85957 و gh-129965.)

multiprocessing

  • در پلتفرم‌های یونیکس به‌جز macOS، 'forkserver' اکنون روش شروع پیش‌فرض است (جایگزین 'fork'). این تغییر بر ویندوز یا macOS تأثیری نمی‌گذارد؛ در آن‌ها 'spawn' همچنان روش شروع پیش‌فرض است.

    اگر روش fork ناسازگار با نخ‌بندی مورد نیاز است، باید آن را به‌طور صریح از طریق زمینه‌ای از get_context() (ترجیحی) درخواست کنید یا پیش‌فرض را از طریق set_start_method() تغییر دهید.

    برای اطلاعات و تفاوت‌های آن با روش فورک و همچنین برای آگاهی از اینکه این تغییر چگونه ممکن است بر کدهای موجود با متغیرهای سراسری اشتراکی تغییرپذیر و/یا اشیاء اشتراکی‌ای که نمی‌توان به‌طور خودکار آن‌ها را پیکل کرد تأثیر بگذارد، به محدودیت‌های forkserver مراجعه کنید.

    (مشارکت‌شده توسط Gregory P. Smith در gh-84559.)

  • روش شروع 'forkserver' در multiprocessing اکنون سوکت کنترل خود را احراز هویت می‌کند تا برای محدود کردن اینکه کدام فرایندهای دیگر می‌توانند باعث شوند سرور انشعاب (forkserver) کارگرها را ایجاد کند و کد اجرا کند، صرفاً به مجوزهای سامانه فایل‌بندی متکی نباشد. (مشارکت‌شده توسط Gregory P. Smith برای gh-97514.)

  • اشیاء پراکسی multiprocessing برای انواع list و dict، متدهای مفقودی را که پیش‌تر نادیده گرفته‌شده بودند به دست می‌آورند:

    • clear() و copy() برای پراکسی‌های list

    • fromkeys()، reversed(d)، d | {}، {} | d، d |= {'b': 2} برای پراکسی‌های dict

    (مشارکتی از Roy Hyunjin Han برای gh-103134.)

  • پشتیبانی از اشیای set مشترک از طریق SyncManager.set() اضافه شد. متد set() در Manager() اکنون در دسترس است. (مشارکت‌شده توسط Mingyu Park در gh-129949.)

  • افزودن متد interrupt() به اشیاء multiprocessing.Process، که فرایند فرزند را با ارسال SIGINT خاتمه می‌دهد. این کار به بندهای finally امکان می‌دهد تا ردگیری پشته‌ای برای فرایند خاتمه‌یافته چاپ کنند. (مشارکت‌شده توسط آرتم پولکین در gh-131913.)

operator

  • افزودن is_none() و is_not_none() به‌عنوان یک جفت تابع، به‌گونه‌ای که operator.is_none(obj) معادل obj is None و operator.is_not_none(obj) معادل obj is not None باشد. (مشارکت Raymond Hettinger و Nico Mexis در gh-115808.)

os

  • تابع reload_environ() اضافه شد تا os.environ و os.environb را با تغییرات اعمال‌شده در محیط توسط os.putenv() یا os.unsetenv()، یا با تغییراتی که خارج از پایتون در همان فرایند ایجاد شده‌اند، به‌روزرسانی کند. (مشارکت‌شده توسط Victor Stinner در gh-120057.)

  • ثابت‌های SCHED_DEADLINE و SCHED_NORMAL به ماژول os افزوده شدند. (با مشارکت James Roy در gh-127688.)

  • تابع readinto() برای خواندن درون یک شیء بافر از یک توصیف‌گر پرونده افزوده شد. (مشارکت کودی مالونی در gh-129205.)

os.path

  • پارامتر strict در realpath() مقدار جدیدی به نام ALLOW_MISSING را می‌پذیرد. در صورت استفاده، خطاهایی غیر از FileNotFoundError دوباره ایجاد خواهند شد؛ مسیر حاصل می‌تواند وجود نداشته باشد، اما فاقد پیوندهای نمادین خواهد بود. (مشارکت‌شده توسط Petr Viktorin برای CVE 2025-4517.)

pathlib

  • افزودن متدهایی به pathlib.Path برای کپی یا انتقال بازگشتی پرونده‌ها و پوشه‌ها:

    • copy() یک پرونده یا درخت پوشه را به مقصد کپی می‌کند.

    • copy_into() به داخلِ یک پوشه‌ی مقصد کپی می‌کند.

    • move() یک پرونده یا درخت پوشه را به مقصد منتقل می‌کند.

    • متد move_into() به درون پوشه‌ی مقصد منتقل می‌کند.

    (مشارکت Barney Gale در gh-73991.)

  • ویژگی info افزوده شد که شیء‌ای را ذخیره می‌کند که پروتکل جدید pathlib.types.PathInfo را پیاده‌سازی می‌کند. این شیء از پرس‌وجوی نوع پرونده و نهانگاه‌سازی داخلی نتایج stat() پشتیبانی می‌کند. اشیاء Path تولیدشده توسط iterdir() با اطلاعات نوع پرونده‌ی حاصل از پویش پوشه والد، مقداردهی اولیه می‌شوند. (مشارکت‌شده توسط Barney Gale در gh-125413.)

pdb

  • ماژول pdb اکنون از اتصال از راه دور به یک فرایند پایتون در حال اجرا با استفاده از گزینه‌ی جدید خط فرمان -p PID پشتیبانی می‌کند:

    python -m pdb -p 1234
    

    این کار به فرایند پایتون با PID داده‌شده متصل می‌شود و به شما امکان می‌دهد آن را به‌صورت تعاملی اشکال‌زدایی کنید. توجه داشته باشید که به دلیل نحوه‌ی کار مفسر پایتون، اتصال به یک فرایند از راه دور که در یک فراخوانی سیستمی مسدود شده یا در انتظار ورودی/خروجی است، تنها زمانی کار می‌کند که دستور بایت‌کد بعدی اجرا شود یا فرایند سیگنالی دریافت کند.

    این قابلیت از PEP 768 و تابع جدید sys.remote_exec() برای اتصال به فرایند از راه دور و ارسال دستورهای PDB به آن استفاده می‌کند.

    (مشارکت‌شده توسط Matt Wozniski و Pablo Galindo در gh-131591.)

  • نقاط توقف ثابت (hardcoded) (breakpoint() و set_trace()) اکنون به‌جای اینکه هر بار نمونه‌ی جدیدی ایجاد کنند، از آخرین نمونه‌ی Pdb که set_trace() را فراخوانی می‌کند، دوباره استفاده می‌کنند. در نتیجه، تمام داده‌های مخصوص نمونه مانند display و commands بین نقاط توقف ثابت حفظ می‌شوند. (مشارکت‌شده توسط Tian Gao در gh-121450.)

  • آرگومان جدید mode به pdb.Pdb اضافه شد. دستور restart هنگامی که pdb در حالت inline باشد، غیرفعال می‌شود. (مشارکت‌شده توسط Tian Gao در gh-123757.)

  • وقتی کاربر بخواهد از pdb در حالت inline خارج شود، یک اعلان تأیید نمایش داده می‌شود. y، Y، <Enter> یا EOF خروج را تأیید کرده و به جای برخاستن استثنای bdb.BdbQuit، sys.exit() را فراخوانی می‌کنند. (مشارکت‌شده توسط Tian Gao در gh-124704.)

  • نقطه‌های توقف درون‌خطی مانند breakpoint() یا pdb.set_trace() همیشه برنامه را در فریم فراخوانی متوقف می‌کنند و الگوی skip (در صورت وجود) را نادیده می‌گیرند. (با مشارکت Tian Gao در gh-130493.)

  • <tab> در ابتدای سطر در ورودی چندسطری pdb اکنون به‌جای درج نویسه‌ی \t، یک تورفتگی ۴ فاصله‌ای ایجاد می‌کند. (مشارکت‌شده توسط Tian Gao در gh-130471.)

  • قابلیت تورفتگی خودکار در ورودی چندسطری pdb معرفی شد. این قابلیت یا تورفتگی سطر آخر را حفظ می‌کند، یا هنگامی که بلوک کد جدیدی را تشخیص می‌دهد، تورفتگی ۴ فاصله‌ای درج می‌کند. (با مشارکت Tian Gao در gh-133350.)

  • $_asynctask برای دسترسی به وظیفه‌ی جاری asyncio (در صورت وجود) افزوده شد. (مشارکت Tian Gao در gh-124367.)

  • pdb.set_trace_async() برای پشتیبانی از اشکال‌زدایی هم‌روال‌های asyncio اضافه شده است. از دستورهای await با این تابع پشتیبانی می‌شود. (مشارکت‌شده توسط Tian Gao در gh-132576.)

  • کد منبع نمایش‌داده‌شده در pdb با برجسته‌سازی سینتکس نمایش داده خواهد شد. این قابلیت را می‌توان با همان روش‌های مورد استفاده در پوسته‌ی interactive پیش‌فرض و همچنین با آرگومان colorize که به‌تازگی به pdb.Pdb افزوده شده است، کنترل کرد. (مشارکت Tian Gao و Łukasz Langa در gh-133355.)

pickle

  • نسخه‌ی پیش‌فرض پروتکل در ماژول pickle را روی ۵ تنظیم می‌کند. برای جزئیات بیشتر، به پروتکل‌های پیکل مراجعه کنید.

  • افزودن یادداشت‌های استثنا به خطاهای سریال‌سازی پیکل که امکان شناسایی منبع خطا را فراهم می‌کنند. (مشارکت‌شده توسط Serhiy Storchaka در gh-122213.)

platform

  • افزودن invalidate_caches()، تابعی برای باطل کردن نتایج نهانگاهی‌شده در ماژول platform. (مشارکت‌شده توسط Bénédikt Tran در gh-122549.)

pydoc

  • حاشیه‌نویسی‌ها در خروجی راهنما اکنون معمولاً در قالبی نزدیک‌تر به قالب کد منبع اصلی نمایش داده می‌شوند. (مشارکت‌شده توسط Jelle Zijlstra در gh-101552.)

re

  • پشتیبانی از \z به‌عنوان مترادف \Z در عبارت‌های باقاعده. این الگو در بسیاری از موتورهای عبارت باقاعده‌ی دیگر بدون ابهام تفسیر می‌شود، برخلاف \Z که رفتار آن تفاوت‌های ظریفی دارد. (مشارکت‌شده توسط Serhiy Storchaka در gh-133306.)

  • \B در عبارت باقاعده اکنون با رشته ورودی خالی تطبیق می‌کند، به این معنا که اکنون همیشه عکس \b است. (مشارکت‌شده توسط Serhiy Storchaka در gh-124130.)

socket

  • بهبود و اصلاح پشتیبانی از سوکت‌های بلوتوث.

    • رفع اشکال پشتیبانی از سوکت‌های بلوتوث در NetBSD و DragonFly BSD. (مشارکت‌شده توسط Serhiy Storchaka در gh-132429.)

    • اصلاح پشتیبانی از BTPROTO_HCI در FreeBSD. (مشارکت‌شده توسط Victor Stinner در gh-111178.)

    • افزودن پشتیبانی از BTPROTO_SCO در FreeBSD. (مشارکت‌شده توسط Serhiy Storchaka در gh-85302.)

    • افزودن پشتیبانی از cid و bdaddr_type در نشانی برای BTPROTO_L2CAP در FreeBSD. (با مشارکت Serhiy Storchaka در gh-132429.)

    • افزودن پشتیبانی از channel در نشانی مربوط به BTPROTO_HCI در لینوکس. (مشارکت‌شده توسط Serhiy Storchaka در gh-70145.)

    • پذیرش یک عدد صحیح به‌عنوان نشانی برای BTPROTO_HCI در لینوکس. (مشارکت‌شده توسط Serhiy Storchaka در gh-132099.)

    • برگرداندن cid در getsockname() برای BTPROTO_L2CAP. (مشارکت Serhiy Storchaka در gh-132429.)

    • ثابت‌های جدید بسیاری افزوده شد. (مشارکت‌شده توسط Serhiy Storchaka در gh-132734.)

ssl

  • بولی HAS_PHA نشان می‌دهد که آیا ماژول ssl از احراز هویت کلاینت پس از دست‌دهی (PHA) در TLSv1.3 پشتیبانی می‌کند یا خیر. (مشارکت‌شده توسط Will Childs-Klein در gh-128036.)

struct

  • پشتیبانی از نوع‌های C float complex و double complex در ماژول struct (به ترتیب نویسه‌های قالب‌بندی 'F' و 'D'). (با مشارکت Sergey B Kirpichev در gh-121249.)

symtable

sys

  • تابع ویژه‌ی sys.getobjects() که پیش‌تر مستند نشده بود و فقط در ساخت‌های خاص پایتون وجود دارد، اکنون ممکن است اشیاءی را از مفسرهایی غیر از مفسری که در آن فراخوانی می‌شود بازگرداند. (مشارکت‌شده توسط اریک اسنو در gh-125286.)

  • تابع sys._is_immortal() برای تعیین اینکه آیا یک شیء نامیرا است، افزوده شد. (مشارکت‌شده توسط Peter Bierma در gh-128509.)

  • در FreeBSD، sys.platform دیگر شامل شماره نسخه‌ی اصلی نیست. همیشه 'freebsd' است، به‌جای 'freebsd13' یا 'freebsd14'. (مشارکت‌شده توسط Michael Osipov در gh-129393.)

  • ایجاد DeprecationWarning برای sys._clear_type_cache(). این تابع در پایتون 3.13 منسوخ شد، اما هشدار ران‌تایم ایجاد نمی‌کرد.

  • تابع sys.remote_exec() برای پیاده‌سازی رابط اشکال‌زدای خارجی جدید افزوده شد. برای جزئیات به PEP 768 مراجعه کنید. (با مشارکت Pablo Galindo Salgado، Matt Wozniski و Ivona Stojanovic در gh-131591.)

  • فضای نام sys._jit افزوده شد که شامل ابزارهایی برای درون‌نگری کامپایل در لحظه است. (با مشارکت Brandt Bucher در gh-133231.)

sys.monitoring

  • دو رویداد نظارتی جدید، BRANCH_LEFT و BRANCH_RIGHT، افزوده شده‌اند. این دو رویداد جایگزین رویداد BRANCH شده و آن را منسوخ می‌کنند. (مشارکت‌شده توسط Mark Shannon در gh-122548.)

  • Add sys.monitoring.clear_tool_id() to unregister all events and callback functions associated with a tool identifier. sys.monitoring.free_tool_id() now calls it before releasing the tool identifier, instead of leaving its events and callbacks registered. (Contributed by Tian Gao in gh-116750.)

sysconfig

  • افزودن کلید ABIFLAGS به get_config_vars() در ویندوز. (مشارکت‌شده توسط Xuehai Pan در gh-131799.)

tarfile

  • data_filter() اکنون مقصد پیوندهای نمادین را نرمال‌سازی می‌کند تا از حمله‌های پیمایش مسیر (path traversal) جلوگیری شود. (مشارکت‌شده توسط Petr Viktorin در gh-127987 و CVE 2025-4138.)

  • extractall() اکنون هنگامی که پوشه‌ای حذف‌شده یا با نوع دیگری از پرونده جایگزین‌شده باشد، از اصلاح ویژگی‌های پوشه صرف‌نظر می‌کند. (مشارکت‌شده توسط Petr Viktorin در gh-127987 و CVE 2024-12718.)

  • extract() و extractall() اکنون هنگام جایگزین کردن پیوند (سخت یا نمادین) با کپی عضوی دیگر از آرشیو، و هنگام اصلاح ویژگی‌های پوشه، فیلتر استخراج را (دوباره) اعمال می‌کنند. حالت اول استثنای جدیدی به نام LinkFallbackError ایجاد می‌کند. (مشارکت از Petr Viktorin برای CVE 2025-4330 و CVE 2024-12718.)

  • extract() و extractall() دیگر اعضای ردشده را هنگامی که errorlevel() صفر است، استخراج نمی‌کنند. (مشارکت توسط Matt Prodani و Petr Viktorin در gh-112887 و CVE 2025-4435.)

threading

tkinter

  • متدهای after() و after_idle() ابزارک‌های tkinter اکنون آرگومان‌های کلیدواژه‌ای را می‌پذیرند. (مشارکت‌شده توسط Zhikang Yan در gh-126899.)

  • قابلیت تعیین نام برای tkinter.OptionMenu و tkinter.ttk.OptionMenu اضافه شد. (مشارکت‌شده توسط Zhikang Yan در gh-130482.)

turtle

types

  • types.UnionType اکنون نام مستعری برای typing.Union است. برای جزئیات بیشتر به زیر مراجعه کنید. (مشارکت‌شده توسط Jelle Zijlstra در gh-105499.)

typing

  • نوع‌های types.UnionType و typing.Union اکنون مستعار یکدیگر هستند، به این معنا که هم اجتماع (union) سبک قدیمی (ایجادشده با Union[int, str]) و هم اجتماع سبک جدید (int | str) اکنون نمونه‌هایی از همان نوع ران‌تایم ایجاد می‌کنند. این، رفتار میان دو سینتکس را یکپارچه می‌کند، اما به برخی تفاوت‌های رفتاری منجر می‌شود که ممکن است بر کاربرانی که نوع‌ها را در زمان اجرا درون‌نگری می‌کنند تأثیر بگذارد:

    • هر دو سینتکس برای ایجاد اجتماع (union) اکنون در repr() بازنمایی رشته‌ای یکسانی تولید می‌کنند. برای مثال، repr(Union[int, str]) اکنون "int | str" است، به‌جای "typing.Union[int, str]".

    • اجتماع‌هایی (Union) که با سینتکس قدیمی ساخته می‌شوند، دیگر در نهانگاه ذخیره نمی‌شوند. پیش از این، اجرای Union[int, str] به دفعات همان شیء را برمی‌گرداند (Union[int, str] is Union[int, str] برابر True بود)، اما اکنون دو شیء متفاوت برمی‌گرداند. برای مقایسه‌ی یونیون‌ها از نظر برابری، از == استفاده کنید، نه is. یونیون‌های سبک جدید هرگز به این روش در نهانگاه ذخیره نشده‌اند. این تغییر ممکن است مصرف حافظه را برای برخی برنامه‌هایی که از تعداد زیادی یونیون ساخته‌شده از طریق زیرنویسی typing.Union استفاده می‌کنند، افزایش دهد. با این حال، چندین عامل این هزینه را جبران می‌کنند: یونیون‌های استفاده‌شده در حاشیه‌نویسی‌ها به دلیل PEP 649 در پایتون 3.14 دیگر به‌طور پیش‌فرض ارزیابی نمی‌شوند؛ یک نمونه از types.UnionType خود بسیار کوچک‌تر از شیئی است که Union[] در نسخه‌های پیشین پایتون برمی‌گرداند؛ و حذف نهانگاه نیز مقداری صرفه‌جویی در فضا ایجاد می‌کند. بنابراین، بعید است که این تغییر برای اکثر کاربران باعث افزایش قابل‌توجهی در مصرف حافظه شود.

    • قبلاً، یونیون‌های سبک قدیمی با استفاده از کلاس خصوصی typing._UnionGenericAlias پیاده‌سازی می‌شدند. این کلاس دیگر برای پیاده‌سازی مورد نیاز نیست، اما برای سازگاری با نسخه‌های پیشین نگه داشته شده است و حذف آن برای پایتون 3.17 برنامه‌ریزی شده است. کاربران باید به‌جای اتکا به جزئیات پیاده‌سازی خصوصی، از ابزارهای کمکی مستند درون‌نگری مانند get_origin() و typing.get_args() استفاده کنند.

    • اکنون می‌توان از خودِ typing.Union در بررسی‌های isinstance() استفاده کرد. برای مثال، isinstance(int | str, typing.Union) مقدار True را برمی‌گرداند؛ پیش‌تر این کار TypeError ایجاد می‌کرد.

    • ویژگی __args__ از اشیاء typing.Union دیگر قابل نوشتن نیست.

    • دیگر نمی‌توان هیچ ویژگی‌ای را روی اشیاء Union تنظیم کرد. این کار در نسخه‌های قبلی تنها برای ویژگی‌های دندر (dunder) کار می‌کرد، هرگز مستند نشده بود که کار کند، و در بسیاری از موارد به‌طور نا‌محسوس معیوب بود.

    (مشارکت‌شده توسط Jelle Zijlstra در gh-105499.)

  • TypeAliasType اکنون از واگشایی ستاره‌ای پشتیبانی می‌کند.

unicodedata

  • پایگاه داده یونیکد به یونیکد 16.0.0 به‌روزرسانی شده است.

unittest

  • خروجی unittest اکنون به‌طور پیش‌فرض رنگی است. این را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت‌شده توسط هوگو فان کمِناده در gh-127221.)

  • قابلیت کشف unittest دوباره از بسته فضای نام به‌عنوان پوشه شروع پشتیبانی می‌کند. این پشتیبانی در پایتون 3.11 حذف شده بود. (مشارکت‌شده توسط Jacob Walls در gh-80958.)

  • تعدادی متد جدید به کلاس TestCase اضافه شد که آزمون‌های تخصصی‌تری فراهم می‌کنند.

    (مشارکت‌شده توسط Serhiy Storchaka در gh-71339.)

urllib

  • ارتقای الگوریتم احراز هویت دایجست HTTP برای urllib.request با پشتیبانی از احراز هویت دایجست SHA-256 مطابق با مشخصات RFC 7616. (با مشارکت Calvin Bui در gh-128193.)

  • بهبود ارگونومی و انطباق با استانداردها هنگام تجزیه و تولید نشانی‌های file:.

    در url2pathname():

    • پذیرفتن یک URL کامل هنگامی که آرگومان جدید require_scheme روی true تنظیم شود.

    • اگر بخش مرجعِ نشانی‌وب با نام میزبان محلی مطابقت دارد، آن را کنار بگذارید.

    • هنگامی که آرگومان جدید resolve_host برابر true تنظیم شده باشد، مرجع (authority) URL در صورت حل شدن به یک آدرس IP محلی حذف می‌شود.

    • اجزای کوئری و قطعه (fragment) در URL دور ریخته می‌شوند.

    • در صورتی که مرجع (authority) یک URL محلی نباشد، URLError ایجاد می‌شود؛ به‌جز در ویندوز که مانند قبل یک مسیر UNC برمی‌گردانیم.

    در pathname2url():

    • وقتی آرگومان جدید add_scheme برابر با true قرار گیرد، یک URL کامل برمی‌گرداند.

    • در صورتی که مسیر با اسلش آغاز شود، یک مرجع (authority) خالی در URL گنجانده می‌شود. برای مثال، مسیر /etc/hosts به URL ///etc/hosts تبدیل می‌شود.

    در ویندوز، حروف درایو دیگر به حروف بزرگ تبدیل نمی‌شوند و نویسه‌های : که به دنبال حرف درایو نمی‌آیند، دیگر باعث ایجاد استثنای OSError نمی‌شوند.

    (مشارکت از Barney Gale در gh-125866.)

uuid

  • پشتیبانی از نسخه‌های 6، 7 و 8 UUID مطابق مشخصات RFC 9562، از طریق uuid6()، uuid7() و uuid8() به ترتیب اضافه شد. (مشارکت‌شده توسط Bénédikt Tran در gh-89083.)

  • NIL و MAX اکنون برای نمایش قالب‌های UUID تهی (Nil) و بیشینه (Max) مطابق تعریف RFC 9562 در دسترس هستند. (با مشارکت Nick Pope در gh-128427.)

  • امکان تولید همزمان چندین UUID در خط فرمان از طریق python -m uuid --count فراهم شد. (مشارکت‌شده توسط Simon Legner در gh-131236.)

webbrowser

  • نام‌ها در متغیر محیطی BROWSER اکنون می‌توانند به مرورگرهای از پیش ثبت‌شده برای ماژول webbrowser اشاره کنند، به‌جای اینکه همیشه یک دستور مرورگر جدید تولید شود.

    این کار باعث می‌شود که بتوان BROWSER را به مقدار یکی از مرورگرهای پشتیبانی‌شده در macOS تنظیم کرد.

zipfile

  • متد ZipInfo._for_archive اضافه شد؛ متدی برای حل کردن پیش‌فرض‌های مناسب برای شیء ZipInfo همان‌طور که توسط ZipFile.writestr استفاده می‌شود. (مشارکت‌شده توسط Bénédikt Tran در gh-123424.)

  • ZipFile.writestr() اکنون برای پشتیبانی بهتر از ساخت‌های تکرارپذیر، متغیر محیطی SOURCE_DATE_EPOCH را رعایت می‌کند. (مشارکت‌شده توسط Jiahao Li در gh-91279.)

بهینه‌سازی‌ها

asyncio

  • نتایج بنچمارک‌های استاندارد پس از پیاده‌سازی یک فهرست پیوندی دوطرفه‌ی جدید به ازای هر نخ برای وظیفه‌های بومی، به میزان ۱۰ تا ۲۰ درصد بهبود یافته و مصرف حافظه نیز کاهش یافته است. این امر به ابزارهای درون‌نگری خارجی مانند python -m asyncio pstree امکان می‌دهد گراف فراخوانی وظیفه‌های asyncio در حال اجرا در همه‌ی نخ‌ها را درون‌نگری کنند. (مشارکت Kumar Aditya در gh-107803.)

  • این ماژول اکنون پشتیبانی درجه‌یک از ساخت‌های نخ‌آزاد دارد. این امر اجرای موازی چندین حلقه رویداد را در نخ‌های مختلف ممکن می‌سازد که به‌طور خطی با تعداد نخ‌ها مقیاس می‌شود. (مشارکت‌شده توسط Kumar Aditya در gh-128002.)

base64

  • b16decode() اکنون تا شش برابر سریع‌تر شده است. (مشارکت Bénédikt Tran، Chris Markiewicz و Adam Turner در gh-118761.)

bdb

  • اشکال‌زدای پایه اکنون بک‌اندی مبتنی بر sys.monitoring دارد که می‌توان آن را با گذر دادن 'monitoring' به پارامتر جدید backend کلاس Bdb انتخاب کرد. (مشارکت‌شده توسط Tian Gao در gh-124533.)

difflib

  • تابع IS_LINE_JUNK() اکنون تا دو برابر سریع‌تر شده است. (مشارکت‌شده توسط Adam Turner و Semyon Moroz در gh-130167.)

gc

  • از پایتون 3.14.5 به بعد:

    پایتون 3.14.0 تا 3.14.4 با یک زباله‌روب افزایشی جدید عرضه شد. با این حال، به دلیل تعدادی گزارش درباره‌ی فشار حافظه‌ی قابل‌توجه در محیط‌های عملیاتی، آن به زباله‌روب نسل‌محور نسخه‌ی 3.13 بازگردانده شد. این همان زباله‌روب است که اکنون در پایتون 3.14.5 و پس از آن استفاده می‌شود.

  • پیش‌تر در پایتون 3.14.0-3.14.4:

    زباله‌روب افزایشی جدید به این معناست که بیشینه‌ی زمان‌های توقف برای هیپ‌های بزرگ‌تر به اندازه‌ی یک مرتبه بزرگی یا بیشتر کاهش می‌یابند.

    به دلیل این بهینه‌سازی، معنای نتایج get_threshold() و set_threshold() به همراه get_count() و get_stats() تغییر کرده است.

    • برای سازگاری با نسخه‌های پیشین، get_threshold() همچنان یک تاپل سه‌عضوی برمی‌گرداند. مقدار اول، مانند پیش، آستانه‌ی گردآوری‌های جوان است؛ مقدار دوم نرخی را تعیین می‌کند که گردآوری قدیمی با آن پویش می‌شود (مقدار پیش‌فرض ۱۰ است و مقادیر بالاتر به این معناست که گردآوری قدیمی کندتر پویش می‌شود). مقدار سوم اکنون بی‌معناست و همیشه صفر است.

    • set_threshold() اکنون هر آیتمی را پس از آیتم دوم نادیده می‌گیرد.

    • get_count() و get_stats() همچنان همان قالب نتایج را برمی‌گردانند. تنها تفاوت این است که به‌جای آنکه نتایج به نسل‌های جوان، در حال پیر شدن و پیر اشاره کنند، نتایج به نسل جوان و فضاهای پیر شدن و جمع‌آوری نسل پیر اشاره می‌کنند.

    خلاصه اینکه، کدی که سعی می‌کرد رفتار زباله‌روب چرخه‌ای (cycle GC) را دستکاری کند، ممکن است دقیقاً مطابق منظور کار نکند، اما به احتمال بسیار زیاد مضر نخواهد بود. تمام کدهای دیگر بدون هیچ مشکلی کار خواهند کرد.

    (مشارکت Mark Shannon در gh-108362.)

io

  • باز کردن و خواندن پرونده‌ها اکنون فراخوانی‌های سیستمی کمتری اجرا می‌کند. خواندن کامل یک پرونده کوچکِ موجود در نهانگاه سیستم‌عامل تا ۱۵ درصد سریع‌تر است. (مشارکت‌شده توسط Cody Maloney و Victor Stinner در gh-120754 و gh-90102.)

pathlib

  • Path.read_bytes اکنون از حالت بدون بافر برای باز کردن پرونده‌ها استفاده می‌کند، که خواندن کامل آن‌ها را بین ۹٪ تا ۱۷٪ سریع‌تر می‌کند. (مشارکت‌شده توسط کودی مالونی در gh-120754.)

pdb

  • اکنون pdb از دو بک‌اند پشتیبانی می‌کند که مبتنی بر sys.settrace() یا sys.monitoring هستند. استفاده از رابط خط فرمان pdb یا breakpoint() همیشه بک‌اند sys.monitoring را به کار خواهد برد. نمونه‌سازی صریح از pdb.Pdb و کلاس‌های مشتق‌شده‌ی آن به‌صورت پیش‌فرض از بک‌اند sys.settrace() استفاده خواهد کرد که قابل پیکربندی است. (مشارکت‌شده توسط Tian Gao در gh-124533.)

textwrap

  • تابع dedent() بهینه‌سازی شد و عملکرد آن به‌طور میانگین ۲٫۴ برابر بهبود یافت، با بهبود‌های بزرگ‌تر برای ورودی‌های بزرگ‌تر، و اشکالی در نرمال‌سازی ناقص سطر‌های خالی که نویسه‌های فضای سفید به‌جز فاصله و تب دارند، رفع شد.

uuid

  • uuid3() و uuid5() اکنون هر دو برای نام‌های ۱۶ بایتی تقریباً ۴۰٪ سریع‌تر و برای نام‌های ۱۰۲۴ بایتی ۲۰٪ سریع‌تر هستند. کارایی برای نام‌های طولانی‌تر بدون تغییر باقی می‌ماند. (مشارکت‌شده توسط Bénédikt Tran در gh-128150.)

  • uuid4() اکنون حدود ۳۰٪ سریع‌تر شده است. (مشارکت‌شده توسط Bénédikt Tran در gh-128150.)

zlib

  • در ویندوز، zlib-ng اکنون به‌عنوان پیاده‌سازی ماژول zlib در دودویی‌های پیش‌فرض استفاده می‌شود. هیچ ناسازگاری شناخته‌شده‌ای بین zlib-ng و پیاده‌سازی قبلی zlib وجود ندارد. این امر باید به عملکرد بهتری در تمام سطوح فشرده‌سازی منجر شود.

    شایان ذکر است که zlib.Z_BEST_SPEED (1) ممکن است نسبت به پیاده‌سازی قبلی به فشرده‌سازی به‌مراتب کمتری منجر شود، در حالی که زمان فشرده‌سازی را نیز به‌طور چشمگیری کاهش می‌دهد.

    (مشارکت Steve Dower در gh-91349.)

حذف‌شده

argparse

  • پارامترهای type، choices و metavar از BooleanOptionalAction حذف شدند. این پارامترها از پایتون 3.12 منسوخ شده‌اند. (مشارکت نیکیتا سوبولف در gh-118805.)

  • فراخوانی add_argument_group() روی یک گروه آرگومان اکنون استثنای ValueError ایجاد می‌کند. به‌طور مشابه، add_argument_group() یا add_mutually_exclusive_group() روی یک گروه انحصار متقابل اکنون هر دو استثنای ValueError ایجاد می‌کنند. این «تودرتو‌سازی» هرگز پشتیبانی نمی‌شد، اغلب به‌درستی کار نمی‌کرد و به‌طور ناخواسته از طریق وراثت در دسترس قرار گرفته بود. این قابلیت از Python 3.11 منسوخ شده است. (مشارکت‌شده توسط Savannah Ostrowski در gh-127186.)

ast

  • کلاس‌های زیر، که از پایتون 3.8 نام‌های مستعار منسوخِ Constant بوده‌اند و از پایتون 3.12 هشدارهای منسوخ‌سازی صادر کرده‌اند، حذف شدند:

    • Bytes

    • Ellipsis

    • NameConstant

    • Num

    • Str

    در نتیجه‌ی این حذف‌ها، متدهای visit_Num، visit_Str، visit_Bytes، visit_NameConstant و visit_Ellipsis که توسط کاربر روی زیرکلاس‌های سفارشی NodeVisitor تعریف شده‌اند، دیگر هنگام پیمایش یک AST توسط زیرکلاس NodeVisitor فراخوانی نمی‌شوند. به جای آن، یک متد visit_Constant تعریف کنید.

    (مشارکت الکس وی‌گود در gh-119562.)

  • پراپرتی‌های منسوخ زیر روی ast.Constant حذف شدند؛ این پراپرتی‌ها برای سازگاری با کلاس‌های AST که اکنون حذف شده‌اند، وجود داشتند:

    • Constant.n

    • Constant.s

    به جای آن از Constant.value استفاده کنید. (مشارکت‌شده توسط Alex Waygood در gh-119562.)

asyncio

  • کلاس‌ها، متدها و توابع زیر که از پایتون 3.12 منسوخ شده بودند، حذف شدند:

    • AbstractChildWatcher

    • FastChildWatcher

    • MultiLoopChildWatcher

    • PidfdChildWatcher

    • SafeChildWatcher

    • ThreadedChildWatcher

    • AbstractEventLoopPolicy.get_child_watcher()

    • AbstractEventLoopPolicy.set_child_watcher()

    • get_child_watcher()

    • set_child_watcher()

    (مشارکت‌شده توسط Kumar Aditya در gh-120804.)

  • asyncio.get_event_loop() اکنون در صورت نبود حلقه رویداد فعلی، استثنای RuntimeError را پرتاب می‌کند و دیگر به‌طور ضمنی حلقه رویداد ایجاد نمی‌کند.

    (مشارکت Kumar Aditya در gh-126353.)

    چند الگو وجود دارد که از asyncio.get_event_loop() استفاده می‌کنند و بیشتر آن‌ها را می‌توان با asyncio.run() جایگزین کرد.

    اگر در حال اجرای یک تابع ناهمگام هستید، به سادگی از asyncio.run() استفاده کنید.

    پیش از:

    async def main():
        ...
    
    
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(main())
    finally:
        loop.close()
    

    پس از:

    async def main():
        ...
    
    asyncio.run(main())
    

    اگر لازم است چیزی را راه‌اندازی کنید، برای مثال سروری که روی یک سوکت گوش می‌دهد و سپس برای همیشه اجرا می‌شود، از asyncio.run() و یک asyncio.Event استفاده کنید.

    پیش از:

    def start_server(loop): ...
    
    loop = asyncio.get_event_loop()
    try:
        start_server(loop)
        loop.run_forever()
    finally:
        loop.close()
    

    پس از:

    def start_server(loop): ...
    
    async def main():
        start_server(asyncio.get_running_loop())
        await asyncio.Event().wait()
    
    asyncio.run(main())
    

    اگر نیاز دارید چیزی را در یک حلقه رویداد اجرا کنید و سپس کد مسدودکننده‌ای را در اطراف آن اجرا کنید، از asyncio.Runner استفاده کنید.

    پیش از:

    async def operation_one(): ...
    def blocking_code(): ...
    async def operation_two(): ...
    
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(operation_one())
        blocking_code()
        loop.run_until_complete(operation_two())
    finally:
        loop.close()
    

    پس از:

    async def operation_one(): ...
    def blocking_code(): ...
    async def operation_two(): ...
    
    with asyncio.Runner() as runner:
        runner.run(operation_one())
        blocking_code()
        runner.run(operation_two())
    

email

  • پارامتر isdst از email.utils.localtime() حذف شد که در پایتون 3.12 منسوخ شده بود و از آن زمان نادیده گرفته می‌شد. (مشارکت Hugo van Kemenade در gh-118798.)

importlib.abc

itertools

  • حذف پشتیبانی از عملیات کپی، کپی عمیق و پیکل از پیمایش‌گرهای itertools. این موارد از پایتون 3.12 هشدار DeprecationWarning منتشر می‌کردند. (مشارکت‌شده توسط Raymond Hettinger در gh-101588.)

pathlib

  • پشتیبانی از ارسال آرگومان‌های کلیدواژه‌ای اضافی به Path حذف شد. در نسخه‌های قبلی، هر آرگومانی از این دست نادیده گرفته می‌شد. (مشارکت‌شده توسط Barney Gale در gh-74033.)

  • پشتیبانی از ارسال آرگومان‌های جایگاهی اضافی به PurePath.relative_to() و is_relative_to() حذف شد. در نسخه‌های قبلی، هر آرگومانی از این قبیل به other الحاق می‌شد. (مشارکت‌شده توسط Barney Gale در gh-78707.)

pkgutil

  • توابع get_loader() و find_loader() که از پایتون 3.12 منسوخ شده بودند، حذف شدند. (با مشارکت Bénédikt Tran در gh-97850.)

pty

  • توابع master_open() و slave_open() که از پایتون 3.12 منسوخ شده بودند، حذف شدند. به جای آن‌ها از pty.openpty() استفاده کنید. (مشارکت نیکیتا سوبولف در gh-118824.)

sqlite3

  • version و version_info از ماژول sqlite3 حذف شدند؛ برای شماره نسخه واقعی کتابخانه SQLite ران‌تایم از sqlite_version و sqlite_version_info استفاده کنید. (مشارکت‌شده توسط هوگو ون کمِناده در gh-118924.)

  • استفاده از دنباله‌ای از پارامترها با جای‌نگهدارهای نام‌دار، که از پایتون 3.12 منسوخ شده بود، اکنون ProgrammingError ایجاد می‌کند. (مشارکت‌شده توسط Erlend E. Aasland در gh-118928 و gh-101693.)

urllib

  • کلاس Quoter که از پایتون 3.11 منسوخ شده بود، از urllib.parse حذف شد. (با مشارکت نیکیتا سوبولف در gh-118827.)

  • کلاس‌های URLopener و FancyURLopener که از پایتون 3.3 منسوخ شده بودند، از urllib.request حذف شدند.

    می‌توان myopener.open() را با urlopen() جایگزین کرد. myopener.retrieve() را می‌توان با urlretrieve() جایگزین کرد. سفارشی‌سازی‌های کلاس‌های بازکننده (opener) را می‌توان با ارسال هندلرهای سفارشی به build_opener() جایگزین کرد. (مشارکت‌شده توسط Barney Gale در gh-84850.)

منسوخ

منسوخ‌سازی‌های جدید

  • گذر دادن یک عدد مختلط به‌عنوان آرگومان real یا imag در سازنده‌ی complex() اکنون منسوخ شده است؛ اعداد مختلط باید فقط به‌عنوان یک آرگومان جایگاهی واحد گذر داده شوند. (مشارکت‌شده توسط Serhiy Storchaka در gh-109218.)

  • argparse:

    • ارسال آرگومان کلیدواژه‌ای مستند‌نشده prefix_chars به متد add_argument_group() اکنون منسوخ شده است. (ارائه‌شده توسط Savannah Ostrowski در gh-125563.)

    • مبدل نوع argparse.FileType منسوخ شد. هر چیزی که به مدیریت منابع مربوط می‌شود باید در پایین‌دست (downstream)، پس از تجزیه آرگومان‌ها انجام شود. (مشارکت Serhiy Storchaka در gh-58032.)

  • asyncio:

  • codecs: تابع codecs.open() اکنون منسوخ شده است و در نسخه‌ای آینده از پایتون حذف خواهد شد. به جای آن از open() استفاده کنید. (مشارکت‌شده توسط Inada Naoki در gh-133036.)

  • ctypes:

    • در پلتفرم‌های غیر از ویندوز، تنظیم Structure._pack_ برای استفاده از چیدمان حافظه‌ی پیش‌فرض سازگار با MSVC، اکنون به نفع تنظیم Structure._layout_ به 'ms' منسوخ شده است و در پایتون 3.19 حذف خواهد شد. (با مشارکت Petr Viktorin در gh-131747.)

    • فراخوانی ctypes.POINTER() روی یک رشته اکنون منسوخ شده است. برای ساختارهای خودارجاع از نوع‌های ناقص استفاده کنید. همچنین، ctypes._pointer_type_cache داخلی منسوخ شده است. برای جزئیات به‌روز پیاده‌سازی به ctypes.POINTER() مراجعه کنید. (مشارکت‌شده توسط Sergey Myrianov در gh-100926.)

  • functools: فراخوانی پیاده‌سازی پایتونی functools.reduce() با function یا sequence به‌عنوان آرگومان‌های کلیدواژه‌ای اکنون منسوخ شده است؛ این پارامترها در پایتون 3.16 فقط جایگاهی خواهند شد. (مشارکت‌شده توسط Kirill Podoprigora در gh-121676.)

  • logging: پشتیبانی از هندلرهای گزارش‌گیری سفارشی با آرگومان strm اکنون منسوخ شده است و قرار است در پایتون 3.16 حذف شود. در عوض، هندلرها را با آرگومان stream تعریف کنید. (مشارکت‌شده توسط Mariusz Felisiak در gh-115032.)

  • mimetypes: پسوندهای معتبر برای mimetypes.MimeTypes.add_type() یا خالی هستند یا باید با '.' شروع شوند. پسوندهای بدون نقطه منسوخ شده‌اند و در پایتون 3.16 یک ValueError ایجاد خواهند کرد. (ارائه‌شده توسط هوگو ون کمِناده در gh-75223.)

  • nturl2path: این ماژول اکنون منسوخ شده است. به جای آن، urllib.request.url2pathname() و pathname2url() را فراخوانی کنید. (مشارکت‌شده توسط Barney Gale در gh-125866.)

  • os: توابع os.popen() و os.spawn* اکنون به‌طور نرم منسوخ (soft deprecated) هستند. دیگر نباید از آن‌ها برای نوشتن کد جدید استفاده کنید. در عوض، استفاده از ماژول subprocess توصیه می‌شود. (با مشارکت Victor Stinner در gh-120743.)

  • pathlib: pathlib.PurePath.as_uri() اکنون منسوخ شده و حذف آن در پایتون 3.19 برنامه‌ریزی شده است. به جای آن از pathlib.Path.as_uri() استفاده کنید. (مشارکت‌شده توسط برنی گیل در gh-123599.)

  • pdb: ویژگی مستندنشده‌ی pdb.Pdb.curframe_locals اکنون یک پراپرتی فقط‌خواندنی منسوخ است که در نسخه‌های آینده‌ی پایتون حذف خواهد شد. دسترسی پویا با سربار کم به متغیرهای محلی فریم که در پایتون 3.13 توسط PEP 667 اضافه شد، به این معنی است که ارجاع به نهانگاه متغیرهای محلی فریم که پیش‌تر در این ویژگی ذخیره می‌شد، دیگر لازم نیست. اشکال‌زداهای مشتق‌شده باید در پایتون 3.13 و نسخه‌های بعدی، مستقیماً به pdb.Pdb.curframe.f_locals دسترسی داشته باشند. (مشارکت‌شده توسط Tian Gao در gh-124369 و gh-125951.)

  • symtable: symtable.Class.get_methods() به دلیل عدم استقبال منسوخ شد و حذف آن در پایتون 3.16 برنامه‌ریزی شده است. (مشارکت‌شده توسط Bénédikt Tran در gh-119698.)

  • tkinter: متدهای trace_variable()، trace_vdelete() و trace_vinfo() در tkinter.Variable اکنون منسوخ شده‌اند. به جای آن‌ها از trace_add()، trace_remove() و trace_info() استفاده کنید. (مشارکت‌شده توسط Serhiy Storchaka در gh-120220.)

  • urllib.parse: پذیرش اشیاء دارای مقادیر نادرست (مانند 0 و []) به‌جز رشته‌های خالی، اشیاء شبه‌بایت و None در parse_qsl() و parse_qs() اکنون منسوخ شده است. (مشارکت‌شده توسط Serhiy Storchaka در gh-116897.)

در پایتون 3.15 حذف خواهد شد

  • سیستم ایمپورت:

    • تنظیم __cached__ روی یک ماژول در حالی که __spec__.cached تنظیم نشود، منسوخ شده است. در پایتون 3.15، __cached__ دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم نخواهد شد یا در نظر گرفته نخواهد شد. (gh-97879)

    • تنظیم __package__ روی یک ماژول بدون آنکه __spec__.parent تنظیم شود، منسوخ شده است. در پایتون 3.15، __package__ دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم یا در نظر گرفته نخواهد شد. (gh-97879)

  • ctypes:

    • تابع مستند‌نشده‌ی ctypes.SetPointerType() از پایتون 3.13 منسوخ شده است.

  • http.server:

    • کلاس قدیمی و به‌ندرت استفاده‌شده CGIHTTPRequestHandler از پایتون 3.13 منسوخ شده است. هیچ جایگزین مستقیمی وجود ندارد. برای برقراری رابط بین وب‌سرور و هندلر درخواست، هر چیزی بهتر از CGI است.

    • پرچم --cgi در رابط خط فرمان python -m http.server از پایتون 3.13 منسوخ شده است.

  • importlib:

    • متد load_module(): به‌جای آن از exec_module() استفاده کنید.

  • pathlib:

  • platform:

    • java_ver() از پایتون 3.13 منسوخ شده است. این تابع تنها برای پشتیبانی از Jython مفید است، API گیج‌کننده‌ای دارد و عمدتاً آزمایش‌نشده است.

  • sysconfig:

  • threading:

    • RLock() در پایتون 3.15 هیچ آرگومانی نخواهد گرفت. گذراندن هر آرگومانی از پایتون 3.14 منسوخ شده است، زیرا نسخه پایتونی هیچ آرگومانی را مجاز نمی‌داند، اما نسخه C هر تعداد آرگومان جایگاهی یا کلیدواژه‌ای را می‌پذیرد و همه آرگومان‌ها را نادیده می‌گیرد.

  • types:

    • types.CodeType: دسترسی به co_lnotab مطابق PEP 626 از نسخه‌ی 3.10 منسوخ شده بود و قرار بود در 3.12 حذف شود، اما تنها در 3.12 یک DeprecationWarning مناسب دریافت کرد. ممکن است در 3.15 حذف شود. (با مشارکت Nikita Sobolev در gh-101866.)

  • typing:

    • سینتکس آرگومان کلیدواژه‌ای مستندنشده برای ایجاد کلاس‌های NamedTuple (برای مثال، Point = NamedTuple("Point", x=int, y=int)) از پایتون 3.13 منسوخ شده است. به‌جای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید.

    • هنگام استفاده از سینتکس تابعی TypedDict، عدم ارسال مقدار به پارامتر fields (TD = TypedDict("TD")) یا ارسال None (TD = TypedDict("TD", None)) از پایتون 3.13 منسوخ شده است. برای ایجاد یک TypedDict با صفر فیلد، از class TD(TypedDict): pass یا TD = TypedDict("TD", {}) استفاده کنید.

    • تابع دکوراتور @typing.no_type_check_decorator از Python 3.13 منسوخ شده است. پس از هشت سال حضور در ماژول typing، هنوز هیچ‌یک از بررسی‌گرهای نوع اصلی از آن پشتیبانی نکرده است.

  • wave:

  • zipimport:

    • load_module() از پایتون 3.10 منسوخ شده است. به جای آن از exec_module() استفاده کنید. (مشارکت‌شده توسط Jiahao Li در gh-125746.)

در انتظار حذف در پایتون 3.16

  • سیستم ایمپورت:

    • تنظیم __loader__ روی یک ماژول بدون آنکه __spec__.loader تنظیم شود، منسوخ شده است. در پایتون 3.16، __loader__ دیگر توسط سامانه ایمپورت یا کتابخانه استاندارد تنظیم نخواهد شد یا در نظر گرفته نخواهد شد.

  • array:

    • کد قالب 'u' (wchar_t) در مستندات از پایتون 3.3 و در ران‌تایم از پایتون 3.13 منسوخ شده است. به‌جای آن، برای نویسه‌های یونیکد از کد قالب 'w' (Py_UCS4) استفاده کنید.

  • asyncio:

  • builtins:

    • وارون‌سازی بیتی روی نوع‌های بولی، یعنی ~True یا ~False، از پایتون 3.12 منسوخ شده است، زیرا نتایجی عجیب و خلاف شهود تولید می‌کند (-2 و -1). برای نقیض منطقی یک مقدار بولی، به‌جای آن از not x استفاده کنید. در موارد نادری که به وارون‌سازی بیتی عدد صحیح زیرین نیاز دارید، آن را به‌طور صریح به int تبدیل کنید (~int(x)).

  • functools:

    • فراخوانی پیاده‌سازی پایتونیِ functools.reduce() با function یا sequence به‌عنوان آرگومان‌های کلیدواژه‌ای از پایتون 3.14 منسوخ شده است.

  • logging:

    پشتیبانی از هندلرهای سفارشی گزارش‌گیری با آرگومان strm منسوخ شده و برای حذف در پایتون 3.16 برنامه‌ریزی شده است. به جای آن، هندلرها را با آرگومان stream تعریف کنید. (مشارکت Mariusz Felisiak در gh-115032.)

  • mimetypes:

    • پسوندهای معتبر برای mimetypes.MimeTypes.add_type() با '.' شروع می‌شوند یا خالی هستند. پسوندهای بدون نقطه منسوخ شده‌اند و در Python 3.16 باعث ایجاد ValueError می‌شوند. (با مشارکت Hugo van Kemenade در gh-75223.)

  • shutil:

    • استثنای ExecError از پایتون 3.14 منسوخ شده است. این استثنا از پایتون 3.4 به بعد توسط هیچ تابعی در shutil استفاده نشده است و اکنون نام مستعاری برای RuntimeError است.

  • symtable:

  • sys:

  • sysconfig:

    • تابع sysconfig.expand_makefile_vars() از پایتون 3.14 منسوخ شده است. به‌جای آن از آرگومان vars در sysconfig.get_paths() استفاده کنید.

  • tarfile:

    • ویژگی مستندنشده و استفاده‌نشده‌ی TarFile.tarfile از پایتون 3.13 منسوخ شده است.

در انتظار حذف در پایتون 3.17

  • collections.abc:

    • collections.abc.ByteString برای حذف در پایتون 3.17 برنامه‌ریزی شده است.

      برای آزمایش اینکه آیا obj پروتکل بافر را در زمان اجرا پیاده‌سازی می‌کند، از isinstance(obj, collections.abc.Buffer) استفاده کنید. برای استفاده در حاشیه‌نویسی‌های نوع، یا از Buffer استفاده کنید یا از یک اجتماع (union) که به‌صراحت نوع‌هایی را که کد شما پشتیبانی می‌کند مشخص می‌کند (مثلاً bytes | bytearray | memoryview).

      ByteString در اصل قرار بود یک کلاس انتزاعی باشد که به‌عنوان فرانوع (supertype) هر دو bytes و bytearray عمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونه‌ای از ByteString است، در واقع هرگز هیچ چیز مفیدی درباره‌ی آن شیء به شما نمی‌گفت. سایر نوع‌های بافر رایج مانند memoryview نیز هرگز به‌عنوان زیرنوع‌های ByteString در نظر گرفته نمی‌شدند (نه در زمان اجرا و نه توسط بررسی‌گرهای نوع ایستا).

      برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکت‌شده توسط شانتانو جین در gh-91896.)

  • typing:

    • پیش از پایتون 3.14، اجتماعهای سبک قدیمی (old-style unions) با استفاده از کلاس خصوصی typing._UnionGenericAlias پیاده‌سازی می‌شدند. این کلاس دیگر برای پیاده‌سازی مورد نیاز نیست، اما برای سازگاری با نسخه‌های قبلی حفظ شده است و حذف آن برای پایتون 3.17 برنامه‌ریزی شده است. کاربران باید به‌جای تکیه بر جزئیات پیاده‌سازی خصوصی، از ابزارهای کمکی درون‌نگری مستند مانند typing.get_origin() و typing.get_args() استفاده کنند.

    • typing.ByteString که از پایتون 3.9 منسوخ شده است، قرار است در پایتون 3.17 حذف شود.

      برای آزمایش اینکه آیا obj پروتکل بافر را در زمان اجرا پیاده‌سازی می‌کند، از isinstance(obj, collections.abc.Buffer) استفاده کنید. برای استفاده در حاشیه‌نویسی‌های نوع، یا از Buffer استفاده کنید یا از یک اجتماع (union) که به‌صراحت نوع‌هایی را که کد شما پشتیبانی می‌کند مشخص می‌کند (مثلاً bytes | bytearray | memoryview).

      ByteString در اصل قرار بود یک کلاس انتزاعی باشد که به‌عنوان فرانوع (supertype) هر دو bytes و bytearray عمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونه‌ای از ByteString است، در واقع هرگز هیچ چیز مفیدی درباره‌ی آن شیء به شما نمی‌گفت. سایر نوع‌های بافر رایج مانند memoryview نیز هرگز به‌عنوان زیرنوع‌های ByteString در نظر گرفته نمی‌شدند (نه در زمان اجرا و نه توسط بررسی‌گرهای نوع ایستا).

      برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکت‌شده توسط شانتانو جین در gh-91896.)

در انتظار حذف در پایتون 3.18

  • decimal:

    • مشخص‌کننده‌ی قالب 'N' در Decimal، که غیراستاندارد و مستندسازی‌نشده است و تنها در پیاده‌سازی C ماژول decimal پشتیبانی می‌شود، از پایتون 3.13 منسوخ شده است. (مشارکت‌شده توسط Serhiy Storchaka در gh-89902.)

در انتظار حذف در پایتون 3.19

  • ctypes:

    • تغییر ضمنی به چیدمان ساختار سازگار با MSVC از طریق تنظیم _pack_ اما بدون تنظیم _layout_ روی پلتفرم‌های غیر ویندوزی.

در انتظار حذف در نسخه‌های آینده

APIهای زیر در آینده حذف خواهند شد، هرچند در حال حاضر تاریخی برای حذف آن‌ها تعیین نشده است.

  • argparse:

    • تودرتو کردن گروه‌های آرگومان و تودرتو کردن گروه‌های متقابلاً مانعة‌الجمع منسوخ شده‌اند.

    • ارسال آرگومان کلیدواژه‌ای مستندنشده prefix_chars به add_argument_group() اکنون منسوخ شده است.

    • مبدل نوع argparse.FileType منسوخ شده است.

  • builtins:

    • تولیدگرها: امضای throw(type, exc, tb) و athrow(type, exc, tb) منسوخ شده است: به‌جای آن از throw(exc) و athrow(exc) استفاده کنید، یعنی امضای تک‌آرگومانی.

    • در حال حاضر پایتون می‌پذیرد که مقادیر لفظی عددی بلافاصله با کلیدواژه‌ها دنبال شوند، برای مثال 0in x، 1or x، 0if 1else 2. این اجازه می‌دهد عبارت‌های گیج‌کننده و مبهمی مانند [0x1for x in y] نوشته شوند (که می‌توان آن را به صورت [0x1 for x in y] یا [0x1f or x in y] تفسیر کرد). اگر بلافاصله پس از مقدار لفظی عددی، یکی از کلیدواژه‌های and، else، for، if، in، is و or بیاید، یک هشدار نحوی صادر می‌شود. در نسخه‌ای در آینده این به یک خطای نحوی تبدیل خواهد شد. (gh-87999)

    • پشتیبانی از متدهای __index__() و __int__() که نوعی غیر از int برمی‌گردانند: این متدها ملزم خواهند بود که نمونه‌ای از یک زیرکلاس اکیدِ int را برگردانند.

    • پشتیبانی از متد __float__() که زیرکلاس اکیدی از float را برمی‌گرداند: این متدها ملزم خواهند شد که نمونه‌ای از float را برگردانند.

    • پشتیبانی از متد __complex__() که زیرکلاس اکیدی از complex را برمی‌گرداند: این متدها ملزم به برگرداندن نمونه‌ای از complex خواهند بود.

    • ارسال یک عدد مختلط به‌عنوان آرگومان real یا imag در سازنده‌ی complex() اکنون منسوخ شده است؛ این عدد باید فقط به‌عنوان یک آرگومان جایگاهی منفرد ارسال شود. (مشارکت Serhiy Storchaka در gh-109218.)

  • calendar: ثابت‌های calendar.January و calendar.February منسوخ شده‌اند و با calendar.JANUARY و calendar.FEBRUARY جایگزین شده‌اند. (مشارکت‌شده توسط Prince Roshan در gh-103636.)

  • codecs: به‌جای codecs.open() از open() استفاده کنید. (gh-133038)

  • codeobject.co_lnotab: به‌جای آن از متد codeobject.co_lines() استفاده کنید.

  • datetime:

    • utcnow(): از datetime.datetime.now(tz=datetime.UTC) استفاده کنید.

    • utcfromtimestamp(): از datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC) استفاده کنید.

  • gettext: مقدار جمع باید یک عدد صحیح باشد.

  • importlib:

    • پارامتر debug_override در cache_from_source() منسوخ شده است: به‌جای آن از پارامتر optimization استفاده کنید.

  • importlib.metadata:

    • رابط تاپلی EntryPoints.

    • None ضمنی در مقادیر بازگشتی.

  • logging: متد warn() از پایتون 3.3 منسوخ شده است؛ به جای آن از warning() استفاده کنید.

  • mailbox: استفاده از ورودی StringIO و حالت متنی منسوخ شده است؛ به جای آن از BytesIO و حالت دودویی استفاده کنید.

  • os: فراخوانی os.register_at_fork() در فرایند چندنخی.

  • pydoc.ErrorDuringImport: مقدار تاپل برای پارامتر exc_info منسوخ شده است؛ از یک نمونه استثنا استفاده کنید.

  • re: اکنون قواعد سخت‌گیرانه‌تری برای ارجاع‌های عددی گروه و نام گروه‌ها در عبارات باقاعده اعمال می‌شود. اکنون فقط دنباله‌ای از ارقام اسکی به‌عنوان ارجاع عددی پذیرفته می‌شود. نام گروه در الگوهای بایتی و رشته‌های جایگزین اکنون فقط می‌تواند شامل حروف و ارقام اسکی و زیرخط باشد. (مشارکت‌شده توسط Serhiy Storchaka در gh-91760.)

  • ماژول‌های sre_compile، sre_constants و sre_parse.

  • shutil: پارامتر onerror در rmtree() در پایتون 3.12 منسوخ شده است؛ به جای آن از پارامتر onexc استفاده کنید.

  • گزینه‌ها و پروتکل‌های ssl:

    • ssl.SSLContext بدون آرگومان پروتکل منسوخ شده است.

    • ssl.SSLContext: set_npn_protocols() و selected_npn_protocol() منسوخ شده‌اند: به جای آن‌ها از ALPN استفاده کنید.

    • گزینه‌های ssl.OP_NO_SSL*

    • گزینه‌های ssl.OP_NO_TLS*

    • ssl.PROTOCOL_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • متدهای threading:

  • typing.Text (gh-92332).

  • کلاس داخلی typing._UnionGenericAlias دیگر برای پیاده‌سازی typing.Union استفاده نمی‌شود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده می‌کنند، یک شیم سازگاری (compatibility shim) تا حداقل پایتون 3.17 ارائه خواهد شد. (مشارکت Jelle Zijlstra در gh-105499.)

  • unittest.IsolatedAsyncioTestCase: منسوخ شده است که از یک مورد آزمون مقداری غیر از None برگردانده شود.

  • توابع منسوخ urllib.parse: به‌جای آن‌ها از urlparse() استفاده کنید

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • wsgiref: SimpleHandler.stdout.write() نباید نوشتن جزئی (partial write) انجام دهد.

  • xml.etree.ElementTree: آزمودن مقدار درستی یک Element منسوخ شده است. در نسخه‌های آینده، همیشه True بازگردانده خواهد شد. به‌جای آن، آزمون‌های صریح len(elem) یا elem is not None را ترجیح دهید.

  • sys._clear_type_cache() منسوخ شده است: به جای آن از sys._clear_internal_caches() استفاده کنید.

تغییرات بایت‌کد سی‌پایتون

  • آپ‌کد BINARY_SUBSCR با آپ‌کد BINARY_OP به همراه آرگومان عملیات (oparg) NB_SUBSCR جایگزین شد. (مشارکت‌شده توسط Irit Katriel در gh-100239.)

  • آپ‌کد‌های BUILD_INTERPOLATION و BUILD_TEMPLATE به ترتیب برای ساخت نمونه‌های جدید Interpolation و Template افزوده شدند. (مشارکت‌شده توسط Lysandros Nikolaou و دیگران در gh-132661؛ همچنین PEP 750: رشته‌های قالبی را ببینید.)

  • آپ‌کد BUILD_CONST_KEY_MAP حذف شد. به‌جای آن از BUILD_MAP استفاده کنید. (مشارکت‌شده توسط Mark Shannon در gh-122160.)

  • آپ‌کد LOAD_ASSERTION_ERROR با LOAD_COMMON_CONSTANT جایگزین شد و پشتیبانی از بارگذاری NotImplementedError اضافه شد.

  • افزودن آپ‌کد‌های LOAD_FAST_BORROW و LOAD_FAST_BORROW_LOAD_FAST_BORROW برای کاهش سربار شمارش ارجاع زمانی که مفسر بتواند اثبات کند که ارجاع موجود در فریم بیش از ارجاع بارگذاری‌شده روی پشته عمر می‌کند. (مشارکت‌شده توسط Matt Page در gh-130704.)

  • آپ‌کد LOAD_SMALL_INT اضافه شد که یک عدد صحیح کوچک برابر با oparg را روی پشته قرار می‌دهد. آپ‌کد RETURN_CONST حذف شد، زیرا دیگر استفاده نمی‌شود. (مشارکت‌شده توسط Mark Shannon در gh-125837.)

  • دستورالعمل جدید LOAD_SPECIAL افزوده شد. آپ‌کدهای with و async with با استفاده از دستورالعمل جدید تولید می‌شود. دستورالعمل‌های BEFORE_WITH و BEFORE_ASYNC_WITH حذف شدند. (با مشارکت Mark Shannon در gh-120507.)

  • افزودن آپ‌کد POP_ITER برای پشتیبانی از پیمایش‌گرهای «مجازی». (مشارکت‌شده توسط Mark Shannon در gh-132554.)

شبه‌دستورها

  • شبه‌دستور ANNOTATIONS_PLACEHOLDER برای پشتیبانی از حاشیه‌نویسی‌های سطح ماژول که به‌طور جزئی اجرا شده‌اند، همراه با ارزیابی معوق حاشیه‌نویسی‌ها اضافه شد. (مشارکت‌شده توسط Jelle Zijlstra در gh-130907.)

  • شبه‌دستور BINARY_OP_EXTEND افزوده شد که جفتی از توابع (توابع نگهبان و تخصصی‌سازی) را که از نهانگاه درون‌خطی در دسترس‌اند اجرا می‌کند. (مشارکت‌شده توسط Irit Katriel در gh-100239.)

  • سه تخصصی‌سازی برای CALL_KW اضافه شد؛ CALL_KW_PY برای فراخوانی توابع پایتون، CALL_KW_BOUND_METHOD برای فراخوانی متدهای مقید و CALL_KW_NON_PY برای همه‌ی فراخوانی‌های دیگر. (مشارکت‌شده توسط مارک شانون در gh-118093.)

  • افزودن شبه‌دستورالعمل‌های JUMP_IF_TRUE و JUMP_IF_FALSE، پرش‌های شرطی که بر پشته تأثیر نمی‌گذارند. با دنباله‌ی COPY 1، TO_BOOL و POP_JUMP_IF_TRUE/FALSE جایگزین می‌شوند. (مشارکت‌شده توسط Irit Katriel در gh-124285.)

  • افزودن شبه‌دستور (pseudo instruction) LOAD_CONST_MORTAL. (مشارکت‌شده توسط Mark Shannon در gh-128685.)

  • شبه‌دستور LOAD_CONST_IMMORTAL اضافه شد که همان کار LOAD_CONST را انجام می‌دهد، اما برای اشیاء نامیرا کارآمدتر است. (مشارکت‌شده توسط مارک شنون در gh-125837.)

  • افزودن شبه‌دستورالعمل NOT_TAKEN که توسط sys.monitoring برای ثبت رویدادهای انشعاب (مانند BRANCH_LEFT) استفاده می‌شود. (مشارکت‌شده توسط Mark Shannon در gh-122548.)

تغییرات C API

API پیکربندی پایتون در C

افزودن PyInitConfig C API برای پیکربندی مقداردهی اولیه‌ی پایتون بدون تکیه بر ساختارهای C و امکان اعمال تغییرات سازگار با ABI در آینده.

PyConfig C API مربوط به PEP 587 با افزودن PyInitConfig_AddModule() که می‌توان از آن برای افزودن یک ماژول توسعه‌ای توکار استفاده کرد، تکمیل شد؛ قابلیتی که پیش‌تر «inittab» نامیده می‌شد.

افزودن توابع PyConfig_Get() و PyConfig_Set() برای دریافت و تنظیم پیکربندی فعلی ران‌تایم.

PEP 587 «پیکربندی مقداردهی اولیه پایتون» تمام روش‌های پیکربندی مقداردهی اولیه‌ی پایتون را یکپارچه کرد. این PEP همچنین پیکربندی پیش‌مقداردهی اولیه و مقداردهی اولیه‌ی پایتون را در یک API واحد یکپارچه می‌کند. افزون بر این، این PEP برای تعبیه کردن پایتون تنها یک گزینه فراهم می‌کند، به‌جای دو گزینه‌ی «Python» و «Isolated» (PEP 587)، تا API را بیش از پیش ساده کند.

API سطح پایین‌ترِ PyConfig مربوط به PEP 587 همچنان برای موارد استفاده‌ای که به‌طور عمدی سطح بالاتری از جفت‌شدگی (coupling) با جزئیات پیاده‌سازی سی‌پایتون دارند، در دسترس است (مانند شبیه‌سازی تمامی کارکردهای رابط خط فرمان سی‌پایتون، از جمله سازوکارهای پیکربندی آن).

(مشارکت‌شده توسط Victor Stinner در gh-107954.)

همچنین ملاحظه نمائید

PEP 741 و PEP 587

ویژگی‌های جدید در API زبان C

تغییرات API محدود C

  • در C API محدود نسخه 3.14 و جدیدتر، Py_TYPE() و Py_REFCNT() اکنون به‌صورت یک فراخوانی تابع مات پیاده‌سازی شده‌اند تا جزئیات پیاده‌سازی پنهان شود. (با مشارکت Victor Stinner در gh-120600 و gh-124127.)

  • ماکروهای PySequence_Fast_GET_SIZE، PySequence_Fast_GET_ITEM و PySequence_Fast_ITEMS از C API محدود حذف شدند، زیرا این ماکروها همیشه در C API محدود معیوب بوده‌اند. (مشارکت‌شده توسط Victor Stinner در gh-91417.)

APIهای C حذف‌شده

  • ایجاد انواع تغییرناپذیر با کلاس‌های پایه‌ی تغییرپذیر در پایتون 3.12 منسوخ شد و اکنون TypeError ایجاد می‌کند. (مشارکت نیکیتا سوبولف در gh-119775.)

  • عضو PyDictObject.ma_version_tag که در پایتون 3.12 منسوخ شده بود، حذف شد. به جای آن از API PyDict_AddWatcher() استفاده کنید. (با مشارکت Sam Gross در gh-124296.)

  • تابع خصوصی _Py_InitializeMain() حذف شد. این تابع یک API آزمایشی بود که توسط PEP 587 به پایتون 3.8 افزوده شد. (مشارکت‌شده توسط Victor Stinner در gh-129033.)

  • APIهای غیرمستند Py_C_RECURSION_LIMIT و PyThreadState.c_recursion_remaining حذف شدند. این APIها در 3.13 افزوده شده بودند و بدون منسوخ‌شدن حذف شدند. برای محافظت در برابر بازگشتی بی‌مهار در کد C، از Py_EnterRecursiveCall() استفاده کنید. (حذف‌شده توسط Petr Viktorin در gh-133079؛ به gh-130396 نیز مراجعه کنید.)

APIهای C منسوخ

  • ماکروی Py_HUGE_VAL اکنون soft deprecated است. به جای آن از Py_INFINITY استفاده کنید. (مشارکت‌شده توسط Sergey B Kirpichev در gh-120026.)

  • ماکروهای Py_IS_NAN، Py_IS_INFINITY و Py_IS_FINITE اکنون نرم‌منسوخ هستند. به‌جای آن‌ها از isnan، isinf و isfinite استفاده کنید که از C99 به بعد در math.h در دسترس هستند. (مشارکت Sergey B Kirpichev در gh-119613.)

  • دنباله‌های غیرتاپل اکنون به‌عنوان آرگومان برای واحد قالب (format unit) (items) در PyArg_ParseTuple() و سایر توابع تجزیه آرگومان منسوخ شده‌اند، اگر items شامل واحدهای قالب باشد که یک بافر امانتی یا یک ارجاع امانتی ذخیره می‌کنند. (مشارکت‌شده توسط Serhiy Storchaka در gh-50333.)

  • تابع _PyMonitoring_FireBranchEvent اکنون منسوخ شده است و باید با فراخوانی‌های PyMonitoring_FireBranchLeftEvent() و PyMonitoring_FireBranchRightEvent() جایگزین شود.

  • تابع PySequence_In() که پیش‌تر مستند نشده بود، اکنون soft deprecated است. به‌جای آن از PySequence_Contains() استفاده کنید. (مشارکت‌شده توسط Yuki Kobayashi در gh-127896.)

در پایتون 3.15 حذف خواهد شد

در انتظار حذف در پایتون 3.16

  • نسخه‌ی همراه libmpdec.

در انتظار حذف در پایتون 3.18

در انتظار حذف در نسخه‌های آینده

API‌های زیر منسوخ شده‌اند و حذف خواهند شد، هرچند در حال حاضر هیچ تاریخی برای حذف آن‌ها تعیین نشده است.

تغییرات ساخت

  • PEP 776: Emscripten اکنون یک پلتفرم با پشتیبانی رسمی در سطح ۳ است. به‌عنوان بخشی از این تلاش، بیش از ۲۵ اشکال در Emscripten libc رفع شد. Emscripten اکنون پشتیبانی از ctypes، termios و fcntl، و همچنین پشتیبانی آزمایشی از پوسته تعاملی پیش‌فرض جدید را در بر می‌گیرد. (مشارکت‌شده توسط R. Hood Chatham در gh-127146، gh-127683 و gh-136931.)

  • نسخه‌های دودویی رسمی اندروید اکنون در python.org ارائه می‌شوند.

  • اکنون برای تولید configure به GNU Autoconf 2.72 نیاز است. (مشارکت‌شده توسط Erlend Aasland در gh-115765.)

  • wasm32-unknown-emscripten اکنون یک پلتفرم سطح ۳ بر اساس PEP 11 است. (مشارکت‌شده توسط R. Hood Chatham در gh-127146، gh-127683 و gh-136931.)

  • اکنون می‌توان پیوند‌سازی مبتنی بر #pragma با python3*.lib را با استفاده از Py_NO_LINK_LIB غیرفعال کرد. (مشارکت‌شده توسط ژان-کریستوف فیلیون-رابین در gh-82909.)

  • سی‌پایتون اکنون برای بهبود امنیت، مجموعه‌ای از گزینه‌های توصیه‌شده‌ی کامپایلر را به‌صورت پیش‌فرض فعال می‌کند. برای غیرفعال کردن آن‌ها از گزینه‌ی --disable-safety در configure استفاده کنید، یا برای مجموعه‌ی بزرگ‌تری از گزینه‌های کامپایلر از گزینه‌ی --enable-slower-safety استفاده کنید، هرچند با هزینه‌ی کارایی.

  • ماکروی WITH_FREELISTS و گزینه‌ی --without-freelists در configure حذف شده‌اند.

  • گزینه‌ی جدید configure به نام --with-tail-call-interp می‌تواند برای فعال کردن مفسر آزمایشی فراخوانی انتهایی به کار رود. برای جزئیات بیشتر به نوع جدیدی از مفسر مراجعه کنید.

  • برای غیرفعال کردن پشتیبانی جدید اشکال‌زدایی از راه دور، از گزینه‌ی --without-remote-debug در configure استفاده کنید. این کار ممکن است به دلایل امنیتی مفید باشد.

  • اکنون می‌توان برنامه‌های iOS و macOS را برای تغییر مسیر محتوای stdout و stderr به گزارش سیستم پیکربندی کرد. (ارائه‌شده توسط راسل کیت-مگی در gh-127592.)

  • بستر آزمون (testbed) iOS اکنون می‌تواند خروجی آزمون را در حین اجرای آزمون به‌صورت جریانی پخش کند. همچنین می‌توان از بستر آزمون برای اجرای بدنه‌ی آزمون پروژه‌هایی غیر از خودِ سی‌پایتون استفاده کرد. (مشارکت‌شده توسط Russell Keith-Magee در gh-127592.)

build-details.json

نصب‌های پایتون اکنون شامل یک پرونده جدید به نام build-details.json هستند. این یک سند JSON ایستا است که جزئیات ساخت سی‌پایتون را در بر دارد تا امکان درون‌نگری بدون نیاز به اجرای کد فراهم شود. این برای موارد استفاده‌ای مانند راه‌اندازهای پایتون، کامپایل متقاطع و غیره مفید است.

پرونده‌ی build-details.json باید در پوشه‌ی کتابخانه استاندارد مستقل از پلتفرم نصب شود. این پوشه با مسیر نصب 'stdlib' در sysconfig مطابقت دارد که می‌توان آن را با اجرای sysconfig.get_path('stdlib') یافت.

همچنین ملاحظه نمائید

PEP 739 -- build-details.json 1.0 -- پرونده‌ی توصیف ایستا برای جزئیات ساخت پایتون

قطع امضاهای PGP

امضاهای PGP (Pretty Good Privacy) برای نسخه‌های پایتون 3.14 یا نسخه‌های آینده ارائه نخواهند شد. برای راستی‌آزمایی مصنوعات (artifacts) سی‌پایتون، کاربران باید از مواد راستی‌آزمایی Sigstore استفاده کنند. نسخه‌ها از پایتون 3.11 به بعد با استفاده از Sigstore امضا شده‌اند.

این تغییر در فرایند انتشار در PEP 761 مشخص شده است.

پایتون نخ‌آزاد به‌طور رسمی پشتیبانی می‌شود

نسخه‌ی نخ‌آزاد پایتون اکنون پشتیبانی می‌شود و دیگر آزمایشی نیست. این آغازِ فاز دوم است که در آن پایتون نخ‌آزاد به‌طور رسمی پشتیبانی می‌شود اما همچنان اختیاری است.

تیم نخ‌بندی آزاد اطمینان دارد که پروژه در مسیر درست قرار دارد و از فداکاری مستمر همه‌ی کسانی که برای آماده‌سازی نخ‌بندی آزاد جهت پذیرش گسترده‌تر در سراسر کامیونیتی پایتون تلاش می‌کنند، قدردانی می‌کند.

با این توصیه‌ها و پذیرش این PEP (پیشنهاد بهبود پایتون)، کامیونیتی توسعه‌دهندگان پایتون باید به‌طور گسترده اعلام کند که نخ‌بندی آزاد هم‌اکنون و در آینده یک گزینه‌ی پشتیبانی‌شده برای ساخت پایتون است و اینکه بدون یک برنامه‌ی منسوخ‌سازی مناسب حذف نخواهد شد.

هنوز هیچ تصمیمی برای گذار به فاز III، که در آن نخ‌بندی آزاد ساخت‌ پیش‌فرض یا تنها ساخت‌ پایتون باشد، گرفته نشده است و این تصمیم به عوامل متعددی، هم در خود سی‌پایتون و هم در کامیونیتی، وابسته است. این تصمیم به آینده مربوط است.

همچنین ملاحظه نمائید

PEP 779

پذیرش PEP 779

نسخه‌های دودویی برای کامپایلر آزمایشی در لحظه

پرونده‌های دودویی انتشار رسمی macOS و Windows اکنون شامل یک کامپایلر آزمایشی در لحظه هستند. اگرچه استفاده از آن در محیط عملیاتی توصیه نمی‌شود، می‌توان آن را با تنظیم PYTHON_JIT=1 به‌عنوان یک متغیر محیطی آزمایش کرد. ساخت‌های پایین‌دستی از کد منبع و بازتوزیع‌کنندگان می‌توانند از گزینه‌ی پیکربندی --enable-experimental-jit=yes-off برای رفتاری مشابه استفاده کنند.

JIT در مرحله‌ی اولیه قرار دارد و همچنان به‌طور فعال در حال توسعه است. به همین دلیل، تأثیر معمولِ فعال‌سازی آن بر کارایی می‌تواند بسته به بار کاری، از ۱۰٪ کندتر تا ۲۰٪ سریع‌تر متغیر باشد. برای کمک به آزمون و ارزیابی، مجموعه‌ای از توابع درون‌نگری در فضای نام sys._jit ارائه شده است. می‌توان از sys._jit.is_available() برای تعیین اینکه آیا پرونده اجرایی فعلی از کامپایل JIT پشتیبانی می‌کند یا خیر، و از sys._jit.is_enabled() برای تشخیص اینکه آیا کامپایل JIT برای فرایند فعلی فعال شده است یا خیر استفاده کرد.

در حال حاضر، مهم‌ترین قابلیتی که وجود ندارد، این است که اشکال‌زداهای بومی و پروفایل‌گیرهایی مانند gdb و perf نمی‌توانند پشته را از میان فریم‌های JIT باز کنند (اشکال‌زداهای پایتون و پروفایل‌گیرهایی مانند pdb یا profile، بدون تغییر به کار خود ادامه می‌دهند). نسخه‌های نخ‌آزاد از کامپایل در لحظه پشتیبانی نمی‌کنند.

لطفاً هر باگ یا افت عملکرد جدی‌ای که با آن مواجه می‌شوید را گزارش کنید!

همچنین ملاحظه نمائید

PEP 744

انتقال به پایتون 3.14

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

تغییرات در API پایتون

  • در پلتفرم‌های یونیکس به‌جز macOS، اکنون forkserver به‌جای fork، روش شروع پیش‌فرض برای multiprocessing و ProcessPoolExecutor است.

    برای جزئیات، به (1) و (2) مراجعه کنید.

    اگر با خطاهای NameError یا خطاهای پیکل‌سازی ناشی از multiprocessing یا concurrent.futures مواجه شدید، به محدودیت‌های forkserver مراجعه کنید.

    این تغییر بر ویندوز یا macOS تأثیری نمی‌گذارد، جایی که 'spawn' همچنان روش آغاز پیش‌فرض باقی می‌ماند.

  • functools.partial اکنون یک توصیف‌گر متد است. اگر می‌خواهید رفتار قدیمی را حفظ کنید، آن را در staticmethod() پوشش دهید. (مشارکت‌شده توسط Serhiy Storchaka و Dominykas Grigonis در gh-121027.)

  • زباله‌روب اکنون افزایشی است، که به این معناست که رفتار gc.collect() اندکی تغییر می‌کند:

    • gc.collect(1): یک مرحله از زباله‌روبی را انجام می‌دهد، نه اینکه نسل ۱ را جمع‌آوری کند.

    • سایر فراخوانی‌های gc.collect() بدون تغییر باقی می‌مانند.

  • تابع locale.nl_langinfo() اکنون در برخی موارد locale مربوط به LC_CTYPE را به‌طور موقت تنظیم می‌کند. این تغییر موقت بر نخ‌های دیگر تأثیر می‌گذارد. (با مشارکت Serhiy Storchaka در gh-69998.)

  • pickle.dump() و pickle.dumps() اکنون برای برخی شکست‌هایی که پیش‌تر بسته به پیاده‌سازی به AttributeError، ImportError، ValueError، UnicodeEncodeError یا PicklingError منجر می‌شدند، PicklingError ایجاد می‌کنند (برای مثال، پیکل کردن یک شیء محلی یا شیئی که ماژول آن نمی‌تواند ایمپورت شود). استثنای اصلی به PicklingError زنجیر می‌شود. کدی که این استثناها را می‌گیرد باید PicklingError را نیز بگیرد. (مشارکت‌شده توسط Serhiy Storchaka در gh-122311.)

  • types.UnionType اکنون مستعاری برای typing.Union است که باعث تغییراتی در برخی رفتارها می‌شود. برای جزئیات بیشتر به بالا مراجعه کنید. (مشارکت‌شده توسط Jelle Zijlstra در gh-105499.)

  • رفتار ران‌تایم حاشیه‌نویسی‌ها به روش‌های گوناگونی تغییر کرده است؛ برای جزئیات به بالا مراجعه کنید. اگرچه بیشتر کدهایی که با حاشیه‌نویسی‌ها تعامل دارند باید همچنان کار کنند، ممکن است برخی جزئیات مستندنشده رفتار متفاوتی داشته باشند.

  • در راستای عمومی کردن رابط خط فرمان ماژول mimetypes، این رابط اکنون در صورت شکست به جای 0 با 1 خارج می‌شود و در صورت نادرست بودن پارامترهای خط فرمان به جای 1 با 2 خارج می‌شود. پیام‌های خطا اکنون به stderr چاپ می‌شوند.

  • الگوی \B در عبارت باقاعده اکنون هنگامی که به‌عنوان کل الگو داده شود، با رشته خالی تطبیق می‌کند، که ممکن است باعث تغییرات رفتاری شود.

  • در FreeBSD، sys.platform دیگر شامل شماره نسخه اصلی نیست.

تغییرات در حاشیه‌نویسی (PEP 649 و PEP 749)

این بخش راهنمایی درباره‌ی تغییراتی ارائه می‌کند که ممکن است به دلیل تغییرات مرتبط با ارزیابی معوق حاشیه‌نویسی‌ها، در حاشیه‌نویسی‌ها یا در کد پایتون که با حاشیه‌نویسی‌ها تعامل دارد یا آن‌ها را درون‌نگری می‌کند، لازم باشند.

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

پیامدها برای کد حاشیه‌نویسی‌شده

اگر در کد خود حاشیه‌نویسی‌ها را تعریف می‌کنید (برای مثال، برای استفاده با یک بررسی‌گر نوع ایستا)، این تغییر احتمالاً بر شما تأثیری نمی‌گذارد: می‌توانید حاشیه‌نویسی‌ها را همچنان به همان شیوه‌ای که در نسخه‌های قبلی پایتون می‌نوشتید بنویسید.

به احتمال زیاد می‌توانید رشته‌های داخل علامت نقل‌قول را از حاشیه‌نویسی‌ها حذف کنید؛ این رشته‌ها اغلب برای ارجاع‌های پیشرو به کار می‌روند. به‌طور مشابه، اگر برای اجتناب از نوشتن رشته‌ها در حاشیه‌نویسی‌ها از from __future__ import annotations استفاده می‌کنید، به احتمال زیاد می‌توانید پس از آنکه فقط پایتون 3.14 و جدیدتر را پشتیبانی کنید، آن ایمپورت را حذف کنید. با این حال، اگر به کتابخانه‌های شخص ثالثی که حاشیه‌نویسی‌ها را می‌خوانند تکیه دارید، ممکن است این کتابخانه‌ها پیش از آنکه مطابق انتظار کار کنند، برای پشتیبانی از حاشیه‌نویسی‌های بدون علامت نقل‌قول به تغییراتی نیاز داشته باشند.

پیامدها برای خوانندگان __annotations__

اگر کد شما ویژگی __annotations__ را از اشیاء می‌خواند، ممکن است بخواهید تغییراتی انجام دهید تا از کدهایی که به ارزیابی معوق حاشیه‌نویسی‌ها تکیه دارند پشتیبانی کنید. برای مثال، ممکن است بخواهید از annotationlib.get_annotations() با قالب FORWARDREF استفاده کنید، همان‌طور که ماژول dataclasses اکنون انجام می‌دهد.

بسته‌ی خارجی typing_extensions بک‌پورت‌هایی جزئی از برخی از قابلیت‌های ماژول annotationlib — مانند enum Format و تابع get_annotations() — را فراهم می‌کند. از این‌ها می‌توان برای نوشتن کد چندنسخه‌ای (cross-version) که از رفتار جدید در پایتون 3.14 بهره می‌برد، استفاده کرد.

from __future__ import annotations

در پایتون 3.7، PEP 563 دستور آینده‌ی from __future__ import annotations را معرفی کرد که همه‌ی حاشیه‌نویسی‌ها را به رشته تبدیل می‌کند.

با این حال، این دستور اکنون منسوخ شده است و انتظار می‌رود که در نسخه‌ای آینده از پایتون حذف شود. این حذف تا پس از پایان عمر پایتون 3.13 در سال ۲۰۲۹ رخ نخواهد داد؛ پایتون 3.13 آخرین نسخه‌ی پایتون بدون پشتیبانی از ارزیابی معوق حاشیه‌نویسی‌هاست.

در پایتون 3.14، رفتار کدی که از from __future__ import annotations استفاده می‌کند، بدون تغییر است.

تغییرات در API زبان C

  • Py_Finalize() اکنون تمام رشته‌های درونی‌سازی‌شده را حذف می‌کند. این تغییر با هر افزونه‌ی C که پس از فراخوانی Py_Finalize() یک رشته‌ی درونی‌سازی‌شده را نگه می‌دارد و سپس پس از فراخوانی Py_Initialize() دوباره استفاده می‌شود، ناسازگار به عقب است. هر مشکلی که از این رفتار ناشی شود، معمولاً در حین اجرای فراخوانی بعدی Py_Initialize() بر اثر دسترسی به حافظه‌ی مقداردهی‌نشده به فروپاشی منجر می‌شود. برای رفع مشکل، از یک پاک‌ساز آدرس (address sanitizer) برای شناسایی هرگونه استفاده‌ی پس از آزادسازی (use-after-free) ناشی از یک رشته‌ی درونی‌سازی‌شده استفاده کنید و آن را هنگام خاموش‌شدن ماژول آزاد کنید. (مشارکت‌شده توسط Eddie Elizondo در gh-113601.)

  • C API مربوط به شیءهای استثنای یونیکد اکنون در صورتی که آرگومان استثنای آن یک شیء UnicodeError نباشد، یک TypeError ایجاد می‌کند. (مشارکت‌شده توسط Bénédikt Tran در gh-127691.)

تغییرات قابل توجه در 3.14.1

تغییرات قابل توجه در 3.14.5

gc

  • زباله‌روب افزایشی که در پایتون 3.14.0-3.14.4 عرضه شده بود، به دلیل تعدادی گزارش مبنی بر فشار حافظه‌ی قابل‌توجه در محیط‌های عملیاتی، به زباله‌روب نسلی نسخه‌ی 3.13 بازگردانی شده است. برای جزئیات به زباله‌روبی مراجعه کنید.