نسخه ۳.۱۵ چه چیزهای جدیدی دارد

ویرایشگر:

Hugo van Kemenade

این مقاله ویژگی‌های جدید پایتون ۳.۱۵ را در مقایسه با ۳.۱۴ توضیح می‌دهد. پایتون ۳.۱۵ در ۹ اکتبر ۲۰۲۶ منتشر شد. برای جزئیات کامل، سیاهه تغییرات را ببینید.

همچنین ببینید

PEP 790 -- برنامه‌ی انتشار پایتون ۳.۱۵

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

پایتون ۳.۱۵ آخرین نسخه‌ی پایدار زبان برنامه‌نویسی پایتون است که شامل ترکیبی از تغییرات در زبان، پیاده‌سازی و کتابخانه‌ی استاندارد است. بزرگ‌ترین تغییرات شامل واردسازی تنبل، فرهنگ لغت‌های فریز شده و توابع توکار نگهبان، استفاده از UTF-8 به عنوان کدگذاری پیش‌فرض، باز کردن بسته‌بندی در درک مجموعه‌ها، و یک ای‌بی‌آی پایدار برای بیلدهای بدون قفل سراسری مفسر (free-threaded) می‌شود.

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

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

برای راهنمایی در مورد ارتقا از نسخه‌های قبلی پایتون، به Porting to Python 3.15 مراجعه کنید.


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

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

ویژگی‌های جدید تایپینگ:

بهبودهای API زبان C:

تغییرات ساخت:

تغییرات نسخه‌ی جدید:

ویژگی‌های جدید

PEP 810: ایمپورت‌های تنبل صریح

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

توسعه‌دهندگان با انتقال ایمپورت‌ها به داخل تابع‌ها، استفاده از importlib برای بارگذاری ماژول‌ها در صورت نیاز، یا بازسازی ساختار کد برای جلوگیری از وابستگی‌های غیرضروری، این مشکل را دور زده‌اند. این رویکردها کار می‌کنند اما خواندن و نگهداری کد را دشوارتر می‌کنند، دستورهای ایمپورت را در سراسر پایگاه کد پراکنده می‌کنند و برای اعمال مداوم به نظم نیاز دارند.

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

کلیدواژه lazy با دستورهای import و from ... import کار می‌کند. وقتی می‌نویسید lazy import heavy_module، پایتون بلافاصله ماژول را بارگذاری نمی‌کند. در عوض، یک شیء پراکسی سبک‌وزن ایجاد می‌کند. بارگذاری واقعی ماژول به صورت شفاف هنگام دسترسی اولیه‌ی شما به نام اتفاق می‌افتد:

lazy import json
lazy from pathlib import Path

print("Starting up...")  # json and pathlib are not fully imported yet

data = json.loads('{"key": "value"}')  # json gets fully imported here
p = Path(".")  # pathlib gets fully imported here

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

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

برای مواردی که می‌خواهید بارگذاری تنبل را به صورت سراسری و بدون تغییر کد منبع فعال کنید، پایتون گزینه‌ی خط فرمان -X lazy_imports و متغیر محیطی PYTHON_LAZY_IMPORTS را فراهم می‌کند. هر دو دو مقدار را می‌پذیرند: all همه ایمپورت‌ها را به طور پیش‌فرض تنبل می‌کند، و normal (پیش‌فرض) به کلیدواژه lazy در کد منبع احترام می‌گذارد. توابع sys.set_lazy_imports() و sys.get_lazy_imports() امکان تغییر و پرس‌وجوی این حالت را در ران‌تایم فراهم می‌کنند.

برای کنترل انتخابی‌تر، تابع sys.set_lazy_imports_filter() یک شیء فراخوانی‌پذیر را می‌پذیرد که تعیین می‌کند آیا یک ماژول خاص باید به صورت تنبل بارگذاری شود یا خیر. این فیلتر سه آرگومان دریافت می‌کند: نام ماژول ایمپورت‌کننده (یا None)، نام ماژول ایمپورت‌شده، و fromlist (یا None برای ایمپورت‌های معمولی). این تابع باید True برگرداند تا به ایمپورت اجازه دهد تنبل باشد، یا False برگرداند تا بارگذاری اشتیاقی را اجبار کند. این امر الگوهایی مانند تنبل کردن فقط ماژول‌های برنامه‌ی خودتان و در عین حال حفظ وابستگی‌های شخص ثالث به صورت اشتیاقی را امکان‌پذیر می‌سازد:

import sys

def myapp_filter(importing, imported, fromlist):
    return imported.startswith("myapp.")
sys.set_lazy_imports_filter(myapp_filter)
sys.set_lazy_imports("all")

import myapp.slow_module  # lazy (matches filter)
import json               # eager (does not match filter)

خود نوع پراکسی به عنوان types.LazyImportType برای کدهایی که نیاز دارند ایمپورت‌های تنبل را به صورت برنامه‌نویسی تشخیص دهند، در دسترس است.

برخی محدودیت‌ها در مورد جایی که می‌توان از کلیدواژه lazy استفاده کرد وجود دارد. ایمپورت‌های تنبل فقط در محدوده ماژول مجاز هستند؛ استفاده از lazy در داخل یک تابع، بدنه کلاس، یا بلوک try/except/finally یک SyntaxError بالا می‌آورد. نه ایمپورت‌های ستاره‌ای و نه ایمپورت‌های آینده نمی‌توانند تنبل باشند (lazy from module import * و lazy from __future__ import ... هر دو SyntaxError بالا می‌آورند).

برای کدهایی که نمی‌توانند مستقیماً از کلیدواژه lazy استفاده کنند (برای مثال، هنگام پشتیبانی از نسخه‌های پایتون قدیمی‌تر از ۳.۱۵ در حالی که همچنان از ایمپورت‌های تنبل در ۳.۱۵+ استفاده می‌شود)، یک ماژول می‌تواند __lazy_modules__ را به عنوان ظرفی از رشته‌های نام ماژول کاملاً واجد شرایط تعریف کند. دستورهای معمولی import برای آن ماژول‌ها سپس به عنوان تنبل رفتار می‌شوند، با همان معناشناسی کلیدواژه lazy:

__lazy_modules__ = ["json", "pathlib"]

import json     # lazy
import os       # still eager

(مشارکت‌داده‌شده توسط Pablo Galindo Salgado و Dino Viehland در gh-142349.)

همچنین ببینید

PEP 810 برای مشخصات کامل و توجیه منطقی.

PEP 814: افزودن نوع توکار frozendict

یک نوع تغییرناپذیر جدید به نام frozendict به ماژول builtins اضافه شده است. این نوع اجازه نمی‌دهد پس از ایجاد تغییری در آن ایجاد شود. یک شیء frozendict زیرکلاسی از dict نیست؛ بلکه مستقیماً از object ارث‌بری می‌کند. یک شیء frozendict تا زمانی که تمام کلیدها و مقادیر آن هش‌پذیر باشند، هش‌پذیر است. یک شیء frozendict ترتیب درج را حفظ می‌کند، اما مقایسه، ترتیب را در نظر نمی‌گیرد.

برای مثال:

>>> a = frozendict(x=1, y=2)
>>> a
frozendict({'x': 1, 'y': 2})
>>> a['z'] = 3
Traceback (most recent call last):
  File "<python-input-2>", line 1, in <module>
    a['z'] = 3
    ~^^^^^
TypeError: 'frozendict' object does not support item assignment
>>> b = frozendict(y=2, x=1)
>>> hash(a) == hash(b)
True
>>> a == b
True

ماژول‌های کتابخانه‌ی استاندارد زیر به‌روزرسانی شده‌اند تا frozendict را بپذیرند: copy، decimal، json، marshal، plistlib (فقط برای سریال‌سازی)، pickle، pprint و xml.etree.ElementTree.

توابع eval() و exec() نوع frozendict را برای globals می‌پذیرند و type() و str.maketrans() نوع frozendict را برای dict می‌پذیرند.

کدهایی که نوع dict را با استفاده از isinstance(arg, dict) بررسی می‌کنند، می‌توانند به‌روزرسانی شوند تا نوع frozendict را نیز با isinstance(arg, (dict, frozendict)) بپذیرند، یا با isinstance(arg, collections.abc.Mapping) سایر انواع نگاشت مانند MappingProxyType را نیز بپذیرند.

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

همچنین ببینید

برای مشاهده‌ی مشخصات کامل و توجیه منطقی، به PEP 814 مراجعه کنید.

PEP 661: افزودن نوع توکار sentinel

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

(مشارکت‌کرده توسط Jelle Zijlstra در gh-148829؛ PEP 661 توسط Tal Einat نوشته شده است.)

همچنین ببینید

برای جزئیات بیشتر به PEP 661 مراجعه کنید.

PEP 799: یک بسته‌ی اختصاصی برای پروفایل‌گیری

یک ماژول profiling جدید اضافه شده است تا ابزارهای پروفایل‌گیری توکار پایتون را تحت یک فضای نام واحد و منسجم سازمان‌دهی کند. این ماژول شامل موارد زیر است:

  • profiling.tracing: ردیابی قطعی فراخوانی تابع (منتقل‌شده از cProfile).

  • profiling.sampling: یک پروفایل‌گیر نمونه‌برداری آماری جدید (به نام Tachyon).

ماژول cProfile به عنوان یک نام مستعار برای سازگاری با نسخه‌های قبلی باقی می‌ماند. ماژول profile منسوخ شده است و در پایتون ۳.۱۷ حذف خواهد شد.

(مشارکت‌کرده توسط Pablo Galindo و László Kiss Kollár در gh-138122.)

همچنین ببینید

برای جزئیات بیشتر به PEP 799 مراجعه کنید.

تاکیون: پروفایل‌گیر نمونه‌برداری آماری با فرکانس بالا

لوگوی پروفایل‌گیر تاکیون

یک پروفایل‌گیر نمونه‌برداری آماری جدید (تاکیون) به profiling.sampling اضافه شده است. این پروفایل‌گیر امکان تحلیل عملکرد با سربار کم را روی فرایندهای در حال اجرای پایتون بدون نیاز به تغییر کد یا راه‌اندازی مجدد فرایند فراهم می‌کند.

برخلاف پروفایل‌گیرهای قطعی (مانند profiling.tracing) که هر فراخوانی تابع را ابزارگذاری می‌کنند، پروفایل‌گیر نمونه‌برداری به‌طور دوره‌ای ردگیری پشته‌ها را از فرایندهای در حال اجرا ثبت می‌کند. این رویکرد عملاً سربار صفر را فراهم می‌کند و در عین حال نرخ‌های نمونه‌برداری تا ۱,۰۰۰,۰۰۰ هرتز را به دست می‌آورد، که آن را به سریع‌ترین پروفایل‌گیر نمونه‌برداری موجود برای پایتون (در زمان مشارکت آن) تبدیل می‌کند و برای اشکال‌زدایی مشکلات عملکرد در محیط‌های پروداکشن ایده‌آل است. این قابلیت به‌ویژه برای اشکال‌زدایی مشکلات عملکرد در سیستم‌های پروداکشن که روش‌های سنتی پروفایل‌گیری در آن‌ها بیش از حد مزاحم خواهند بود، بسیار باارزش است.

ویژگی‌های کلیدی عبارتند از:

  • پروفایل‌گیری با سربار صفر: به هر فرایند در حال اجرای پایتون بدون تأثیر بر عملکرد آن متصل شوید. ایده‌آل برای اشکال‌زدایی پروداکشن که در آن امکان راه‌اندازی مجدد یا کند کردن برنامه‌ی خود را ندارید.

  • بدون نیاز به تغییر کد: برنامه‌های موجود را بدون راه‌اندازی مجدد پروفایل کنید. به سادگی پروفایل‌گیر را با استفاده از PID روی یک فرایند در حال اجرا قرار دهید و شروع به جمع‌آوری داده‌ها کنید.

  • حالت‌های هدف انعطاف‌پذیر:

    • پروفایل کردن فرایندهای در حال اجرا بر اساس PID (attach) - اتصال به برنامه‌های از پیش در حال اجرا

    • اجرا و پروفایل مستقیم اسکریپت‌ها (run) - پروفایل‌گیری از همان ابتدای اجرا

    • اجرا و پروفایل ماژول‌ها (run -m) - پروفایل‌گیری بسته‌های اجرا شده به صورت python -m module

    • ثبت یک تصویر لحظه‌ای تک‌باره از یک فرایند در حال اجرا (dump) - چاپ پشته‌ای به سبک ردگیری از هر نخ (یا تمام وظایف asyncio با --async-aware). مفید برای بررسی فرایندهای متوقف‌شده.

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

    • زمان ساعت دیواری (--mode wall، پیش‌فرض): زمان سپری‌شده‌ی واقعی شامل I/O، انتظارهای شبکه و عملیات‌های مسدود کننده را اندازه‌گیری می‌کند. از این مورد استفاده کنید تا بفهمید برنامه‌ی شما زمان تقویمی خود را کجا صرف می‌کند، از جمله زمانی که منتظر منابع خارجی است.

    • زمان CPU (--mode cpu): فقط زمان اجرای فعال CPU را اندازه‌گیری می‌کند و انتظارهای I/O و مسدود کننده را مستثنی می‌کند. از این مورد برای شناسایی گلوگاه‌های محدود به CPU و بهینه‌سازی کار محاسباتی استفاده کنید.

    • زمان نگهداری GIL (--mode gil): زمان صرف‌شده برای نگهداری قفل مفسر سراسری پایتون را اندازه‌گیری می‌کند. از این مورد برای شناسایی اینکه کدام نخ‌ها بر استفاده از GIL در برنامه‌های چندنخی تسلط دارند، استفاده کنید.

    • زمان مدیریت استثنا (--mode exception): نمونه‌ها را فقط از نخ‌هایی با یک استثنای فعال ثبت می‌کند. از این مورد برای تحلیل سربار مدیریت استثنا استفاده کنید.

  • پروفایل‌گیری آگاه از نخ: گزینه‌ای برای پروفایل کردن تمام نخ‌ها (-a) یا فقط نخ اصلی، که برای درک رفتار برنامه‌ی چندنخی ضروری است.

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

    • --pstats: آمار جدول‌بندی‌شده‌ی تفصیلی سازگار با pstats. زمان‌بندی در سطح تابع را با نمونه‌های مستقیم و تجمعی نشان می‌دهد. بهترین گزینه برای تحلیل تفصیلی و ادغام با ابزارهای پروفایل‌گیری موجود پایتون.

    • --collapsed: ردگیری‌های پشته‌ی فشرده (یک سطر به ازای هر پشته) تولید می‌کند. این قالب به‌طور ویژه برای ایجاد نمودارهای شعله (flame graphs) با ابزارهای خارجی مانند اسکریپت‌های FlameGraph اثر Brendan Gregg یا speedscope طراحی شده است.

    • --flamegraph: با استفاده از D3.js یک نمودار شعله‌ی تعاملی و خودمتککی HTML تولید می‌کند. برای تحلیل بصری فوری مستقیماً در مرورگر شما باز می‌شود. نمودارهای شعله، سلسله‌مراتب فراخوانی را نشان می‌دهند که در آن عرض نشان‌دهنده‌ی زمان صرف‌شده است و تشخیص سریع گلوگاه‌ها را آسان می‌کند.

    • --gecko: قالب پروفایل‌گیر Gecko سازگار با Firefox Profiler را تولید می‌کند. خروجی را برای تحلیل پیشرفته‌ی مبتنی بر خط زمانی با ویژگی‌هایی مانند نمودارهای پشته، نشانگرها و فعالیت شبکه، در Firefox Profiler بارگذاری کنید.

    • --heatmap: یک تصویرسازی نقلم حرارتی تعاملی HTML با تعداد نمونه‌ها در سطح سطر تولید می‌کند. پوشه‌ای با نقشه‌های حرارتی به ازای هر پرونده ایجاد می‌کند که دقیقا نشان می‌دهد زمان در سطح کد منبع کجا صرف شده است.

  • حالت تعاملی زنده: پروفایل‌گیر TUI بلادرنگ با رابطی شبیه به top (--live). با اجرای برنامه‌ی خود، عملکرد را به همراه مرتب‌سازی و فیلترسازی تعاملی پایش کنید.

  • پروفایل‌گیری آگاه از ناهمگامی: کد ناهمگام/await را با بازسازی پشته‌ی مبتنی بر وظیفه پروفایل کنید (--async-aware). ببینید کدام هم‌روال‌ها در حال مصرف زمان هستند، همراه با گزینه‌هایی برای نمایش فقط وظایف در حال اجرا یا تمام وظایف شامل آن‌هایی که در انتظارند.

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

برای مستندات کامل، از جمله تمام قالب‌های خروجی موجود، حالت‌های پروفایل‌گیری و گزینه‌های پیکربندی، profiling.sampling را ببینید.

(مشارکت‌داده‌شده توسط Pablo Galindo و László Kiss Kollár در gh-135953 و gh-138122.)

PEP 831: اشاره‌گرهای قاب به‌طور پیش‌فرض فعال شدند

سی‌پایتون اکنون به‌طور پیش‌فرض روی پلتفرم‌هایی که از آن‌ها پشتیبانی می‌کنند با اشاره‌گرهای قاب ساخته می‌شود. این کار با استفاده از پرچم‌های کامپایلر -fno-omit-frame-pointer و -mno-omit-leaf-frame-pointer انجام می‌شود که باز کردن پشته‌ی بومی را برای پروفایل‌گیرهای سیستم، دیباگرها، ابزارهای تحلیل فروپاشی و ابزارهای قابلیت مشاهده‌ی مبتنی بر eBPF سریع‌تر و قابل‌اعتمادتر می‌کند.

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

مهم

بک‌اند‌های ساخت شخص ثالث و سیستم‌های ساخت بومی باید هنگام مصرف مقادیر sysconfig پایتون، این پرچم‌ها را حفظ کنند. سیستم‌های ساختی که کد C، C++، Rust یا سایر کدهای بومی را بدون به ارث بردن پرچم‌های کامپایلر پایتون کامپایل می‌کنند، باید خودشان پرچم‌های اشاره‌گر قاب معادل را فعال کنند. یک جزء بومی واحد که بدون اشاره‌گرهای قاب ساخته شده باشد می‌تواند باز کردن پشته را برای کل فرایند پایتون مختل کند.

(مشارکت‌داده‌شده توسط Pablo Galindo Salgado و Savannah Ostrowski در gh-149201؛ PEP 831 نوشته‌شده توسط Pablo Galindo Salgado، Ken Jin، Savannah Ostrowski و Diego Russo.)

همچنین ببینید

برای جزئیات بیشتر PEP 831 را ببینید.

PEP 798: بازکردن بسته در درک‌ها (comprehensions)

درک‌های فهرست، مجموعه و دیکشنری و همچنین عبرات تولیدگر، اکنون از بازکردن بسته با * و ** پشتیبانی می‌کنند. این کار نحو بازکردن بسته را از PEP 448 به درک‌ها گسترش می‌دهد و نحوی جدید برای ترکیب تعداد دلخواهی از موارد پیمایش‌پذیر یا دیکشنری‌ها در یک ساختار تخت واحد فراهم می‌کند. این نحو جدید جایگزینی مستقیم برای درک‌های تو در تو، itertools.chain() و itertools.chain.from_iterable() است. برای مثال:

>>> lists = [[1, 2], [3, 4], [5]]
>>> [*L for L in lists]  # معادل [x for L in lists for x in L]
[1, 2, 3, 4, 5]

>>> sets = [{1, 2}, {2, 3}, {3, 4}]
>>> {*s for s in sets}  # معادل {x for s in sets for x in s}
{1, 2, 3, 4}

>>> dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
>>> {**d for d in dicts}  # معادل {k: v for d in dicts for k,v in d.items()}
{'a': 3, 'b': 2}

عبارت‌های تولیدگر می‌توانند به طور مشابه از بازکردن بسته برای تولید مقادیر از چندین شیء پیمایش‌پذیر استفاده کنند:

>>> gen = (*L for L in lists)  # معادل (x for L in lists for x in L)
>>> list(gen)
[1, 2, 3, 4, 5]

این تغییر همچنین به عبارت‌های تولیدگر ناهمگام گسترش می‌یابد؛ به‌طوری‌که برای مثال، (*a async for a in agen()) معادل (x async for a in agen() for x in a) است.

(تهیه‌شده توسط Adam Hartz در gh-143055.)

همچنین ببینید

برای جزئیات بیشتر به PEP 798 مراجعه کنید.

PEP 829: پرونده‌های پیکربندی راه‌اندازی بسته

پرونده‌های .pth files که هنگام عدم ارائه‌ی گزینه‌ی -S توسط ماژول site بارگذاری می‌شوند، می‌توانند سطرهایی را در بر داشته باشند که هم sys.path را گسترش داده و هم زمانی که سطر با import (به دنبال یک فاصله یا تب) آغاز می‌شود، کد دلخواهی را اجرا کنند. قابلیت دوم می‌تواند مشکل‌ساز باشد، زیرا دانستن دقیق آنچه هنگام راه‌اندازی پایتون اجرا می‌شود دشوار است.

به عنوان گامی در راستای بهبود قابلیت حسابرسی کد اجرایی پیش‌از‌راه‌اندازی، پایتون ۳.۱۵ پرونده‌های .start files را معرفی می‌کند که حاوی مشخصات نقطه‌ی ورود به شکل pkg.mod:callable هستند؛ جایی که pkg.mod مسیر ایمپورت به فراخوانی‌پذیر مورد نظر است. هنگام راه‌اندازی پایتون، فراخوانی‌پذیر پیدا شده و بدون هیچ آرگومانی فراخوانی می‌شود.

سطرهای import در پرونده‌های .pth به صورت بی‌صدا منسوخ شده‌اند. هنگامی که یک پرونده‌ی .start منطبق پیدا شود، سطرهای import در پرونده‌های .pth نادیده گرفته می‌شوند. هیچ تغییری در سطرهای گسترش sys.path در پرونده‌های .pth ایجاد نشده است.

ماژول site همچنین site.StartupState را فراهم می‌کند تا پردازش راه‌اندازی برای دایرکتوری‌های متعدد سایت به صورت دسته‌ای انجام شود و اطمینان حاصل گردد که تمامی توسعه‌های مسیر ایستا پیش از اجرای هرگونه کد راه‌اندازی اعمال می‌شوند. تابع site.main() به طور ضمنی از یک نمونه‌ی این کلاس برای پردازش دسته‌ای تمام پرونده‌های پیکربندی راه‌اندازی در طول راه‌اندازی معمولی مفسر استفاده می‌کند. فراخوانندگانی که به رفتار دسته‌ای مشابه نیاز دارند، می‌توانند یک StartupState را مستقیماً ساخته و آن را با addsitedir()، addusersitepackages() و addsitepackages() هدایت کنند، سپس process() را یک بار در انتهای دسته فراخوانی نمایند.

(تهیه‌شده توسط Barry Warsaw در gh-148641 و gh-150228.)

PEP 803: رابط دودویی کاربردی (ABI) پایدار برای ساخت‌های نخ‌آزاد

افزونه‌های C که رابط دودویی کاربردی پایدار (Stable ABI) را هدف قرار می‌دهند، اکنون می‌توانند برای رابط دودویی کاربردی پایدار برای ساخت‌های نخ‌آزاد جدید (که با نام abi3t نیز شناخته می‌شود) کامپایل شوند، که این امر آن‌ها را با ساخت‌های نخ‌آزاد سی‌پایتون سازگار می‌کند. این کار معمولاً مستلزم برخی تغییرات غیرپیش‌پاافتاده در کد منبع است؛ به طور خاص:

  • تغییر به API معرفی‌شده در PEP 697 (پایتون ۳.۱۲)، مانند basicsize و PyObject_GetTypeData() منفی، به جای قرار دادن PyObject به عنوان بخشی از ساختار (struct) نمونه؛ و

  • تغییر از یک تابع PyInit_ به یک قلاب اکسپورت جدید، یعنی PyModExport_* که برای همین منظور در PEP 793 معرفی شده است، همراه با یک ساختار PySlot جدید که در PEP 820 معرفی شده است.

توجه داشته باشید که رابط دودویی کاربردی (ABI) پایدار تمام قابلیت‌هایی را که سی‌پایتون ارائه می‌دهد، فراهم نمی‌کند. افزونه‌هایی که نمی‌توانند به abi3t تغییر وضعیت دهند، باید به ساخت برای رابط دودویی کاربردی پایدار موجود (abi3) و رابط دودویی کاربردی مخصوص نسخه‌ی نخ‌آزاد (cp315t) به صورت جداگانه ادامه دهند.

رابط دودویی کاربردی (ABI) پایدار برای ساخت‌های نخ‌آزاد معمولاً باید در یک ابزار ساخت انتخاب شود. ابزارهایی که از abi3t پشتیبانی می‌کنند شامل meson-python، scikit-build-core و Maturin می‌شوند؛ برای پیوندها به مستندات آن‌ها درباره‌ی ساخت‌های abi3t به تنظیم ساخت مراجعه کنید. اگر ابزار ساخت شما از abi3t پشتیبانی نمی‌کند، برای cp315t به‌طور جداگانه کامپایل کنید. اگر از ابزار ساخت استفاده نمی‌کنید — یا هنگام نوشتن چنین ابزاری — می‌توانید با تنظیم کلان‌دستور Py_TARGET_ABI3T همان‌طور که در کامپایل کردن برای ABI پایدار بحث شد، abi3t را انتخاب کنید.

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

همچنین ببینید

برای جزئیات بیشتر به PEP 803 مراجعه کنید.

PEP 788: محافظت از API زبان C در برابر نهایی‌سازی مفسر

در API زبان C، نهایی‌سازی مفسر می‌تواند برای بسیاری از افزونه‌ها مشکل‌ساز باشد، زیرا متصل کردن یک وضعیت نخ (thread state) باعث معلق ماندن دائمی نخ خواهد شد که به بن‌بست‌ها و سایر مسائل کاذب منجر می‌شود. علاوه بر این، از نظر تاریخی بررسی ایمن زنده‌بودن مفسر پیش از استفاده از آن غیرممکن بوده است و زمانی که یک نخ به طور همزمان مفسر را حذف می‌کند در حالی که نخ دیگری تلاش دارد به آن متصل شود، به خرابی‌ها (crashes) منجر می‌شود.

اکنون چندین مجموعه‌ی جدید از APIها برای دور زدن این مشکلات وجود دارد:

علاوه بر این، رابط‌های برنامه‌نویسی کاربردی در خانواده‌ی PyGILState (به‌ویژه PyGILState_Ensure() و PyGILState_Release()) منسوخ نرم شده‌اند. هیچ برنامه‌ای برای حذف آن‌ها وجود ندارد و کدهای موجود به کار خود ادامه خواهند داد، اما در نسخه‌های آینده‌ی پایتون هیچ رابط برنامه‌نویسی کاربردی جدیدی از PyGILState ارائه نخواهد شد.

(مشارکت‌کرده توسط Peter Bierma در gh-149101.)

همچنین ببینید

برای جزئیات بیشتر به PEP 788 مراجعه کنید.

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

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

    برای نمونه، اگر شیء دارای ویژگی‌ای باشد که خود نام درخواست‌شده را نمایش می‌دهد، پیام خطا پیشنهاد می‌کند که از طریق آن ویژگی درونی به آن دسترسی داشته باشید:

    from dataclasses import dataclass
    from math import pi
    
    @dataclass
    class Circle:
       radius: float
    
       @property
       def area(self) -> float:
          return pi * self.radius**2
    
    class Container:
       def __init__(self, inner: Circle) -> None:
          self.inner = inner
    
    circle = Circle(radius=4.0)
    container = Container(circle)
    print(container.area)
    

    اجرای این کد اکنون پیشنهاد روشن‌تری را ایجاد می‌کند:

    Traceback (most recent call last):
      File "example.py", line 18, in <module>
        print(container.area)
              ^^^^^^^^^^^^^^
    AttributeError: 'Container' object has no attribute 'area'. Did you mean '.inner.area' instead of '.area'?
    
  • هنگامی که یک AttributeError روی یک نوع توکار تطابق نزدیکی از طریق فاصله‌ی لوونشتین ندارد، پیام خطا اکنون جدول ثابتی از نام‌های متدهای رایج از زبان‌های دیگر (جاوااسکریپت، جاوا، روبی، #C) را بررسی کرده و معادل پایتونی آن را پیشنهاد می‌کند:

    >>> [1, 2, 3].push(4)
    Traceback (most recent call last):
    ...
    AttributeError: 'list' object has no attribute 'push'. Did you mean '.append'?
    
    >>> 'hello'.toUpperCase()
    Traceback (most recent call last):
    ...
    AttributeError: 'str' object has no attribute 'toUpperCase'. Did you mean '.upper'?
    

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

    >>> {}.put("a", 1)
    Traceback (most recent call last):
    ...
    AttributeError: 'dict' object has no attribute 'put'. Use d[k] = v.
    

    هنگامی که یک متد تغییرپذیر روی یک نوع تغییرناپذیر فراخوانی می‌شود، راهنمایی، همتای تغییرپذیر آن را پیشنهاد می‌کند:

    >>> (1, 2, 3).append(4)
    Traceback (most recent call last):
    ...
    AttributeError: 'tuple' object has no attribute 'append'. Did you mean to use a 'list' object?
    

    این راهنمایی‌ها برای زیرکلاس‌های انواع توکار نیز کار می‌کنند.

    (مشارکت‌کرده توسط Matt Van Horn در gh-146406.)

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

    >>> class A:
    ...     pass
    >>> a = A()
    >>> a.abcde = 1
    >>> del a.abcdf
    Traceback (most recent call last):
    ...
    AttributeError: 'A' object has no attribute 'abcdf'. Did you mean: 'abcde'?
    

    (مشارکت‌کرده توسط نیکیتا سوبولِف (Nikita Sobolev) و پرانجال پرجاپاتی (Pranjal Prajapati) در gh-136588.)

  • چندین پیام خطا که به‌طور نادرست از اصطلاح «آرگومان» استفاده کرده بودند، اصلاح شدند. (مشارکت‌کرده توسط استن اولبریخ (Stan Ulbrych) در gh-133382.)

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

  • پایتون اکنون از UTF-8 به عنوان کدگذاری پیش‌فرض استفاده می‌کند که مستقل از محیط سیستم است. این بدان معناست که عملیات‌های ورودی/خروجی بدون کدگذاری صریح، برای مثال open('flying-circus.txt')، از UTF-8 استفاده خواهند کرد. فرمت UTF-8 یک کدگذاری نویسه‌ی یونیکد است که به‌طور گسترده پشتیبانی می‌شود و به استاندارد دو فَتو (de facto) برای نمایش متن، از جمله تقریباً هر صفحه‌وب در اینترنت، بسیاری از فرمت‌های متداول پرونده، زبان‌های برنامه‌نویسی و موارد دیگر تبدیل شده است.

    این امر فقط زمانی اعمال می‌شود که هیچ آرگومان encoding داده نشده باشد. برای بهترین سازگاری بین نسخه‌های مختلف پایتون، مطمئن شوید که همیشه یک آرگومان صریح encoding فراهم شده است. هشدار کدگذاری اختیاری opt-in encoding warning می‌تواند برای شناسایی کدهایی که ممکن است تحت تأثیر این تغییر قرار گیرند، استفاده شود. آرگومان ویژه‌ی encoding='locale' از کدگذاری locale فعلی استفاده می‌کند و از پایتون ۳.۱۰ به بعد پشتیبانی می‌شود.

    برای حفظ رفتار قبلی، حالت UTF-8 پایتون را می‌توان با متغیر محیطی PYTHONUTF8=0 یا گزینه‌ی خط فرمان -X utf8=0 غیرفعال کرد.

    (مشارکت از Adam Turner در gh-133711؛ PEP 686 نوشته‌ی Inada Naoki.)

    همچنین ببینید

    برای جزئیات بیشتر به PEP 686 مراجعه کنید.

  • راهنمای مفسر (مانند python --help) اکنون رنگی است. این ویژگی را می‌توان توسط متغیرهای محیطی کنترل کرد. (مشارکت‌کرده توسط هوگو فان کمناده (Hugo van Kemenade) در gh-148766.)

  • استثناهای غیرقابل‌پرتاب اکنون به‌طور پیش‌فرض با رنگ برجسته می‌شوند. این ویژگی را می‌توان توسط متغیرهای محیطی کنترل کرد. (مشارکت‌کرده توسط پیتر بیرما (Peter Bierma) در gh-134170.)

  • رنگ‌های بیشتر در راهنمای CLI مربوط به argparse، ast، calendar، difflib، http.server، pickletools، PyREPL tab completion، python --help، sqlite3، timeit، tokenize، unraisable exceptions و کتابخانه‌ی استاندارد (ast، compileall، doctest، gzip، inspect، json.tool، pdb، profiling.sampling، random، regrtest، sqlite3، timeit، tokenize، trace، unittest، uuid، zipapp، zipfile).

  • متد __repr__() برای ImportError و ModuleNotFoundError اکنون اگر «name» و «path» در زمان ساخت به عنوان آرگومان‌های کلیدواژه‌ای داده شده باشند، آن‌ها را به صورت name=<name> و path=<path> نمایش می‌دهد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka)، اولگ ایاریگین (Oleg Iarygin) و یوآو نیر (Yoav Nir) در gh-74185.)

  • توصیف‌گرهای __dict__ و __weakref__ اکنون از یک نمونه توصیف‌گر واحد به ازای هر مفسر استفاده می‌کنند که در میان تمام انواعی که به آن‌ها نیاز دارند به اشتراک گذاشته می‌شود. این کار باعث سرعت بخشیدن به ایجاد کلاس و کمک به جلوگیری از چرخه‌های ارجاع می‌شود. (مشارکت‌کرده توسط پتر ویکتورین (Petr Viktorin) در gh-135228.)

  • گزینه‌ی -W و متغیر محیطی PYTHONWARNINGS اکنون می‌توانند به جای رشته‌های لفظی، عبارات باقاعده را برای تطبیق پیام هشدار و نام ماژول مشخص کنند، مشروط بر اینکه فیلد مربوطه با یک اسلش رو به جلو (/) شروع و تمام شود. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-134716.)

  • توابعی که آرگومان‌های زمان‌سنجی (timestamp) یا مهلت زمانی (timeout) را می‌پذیرند، اکنون هر عدد حقیقی (مانند Decimal و Fraction) را می‌پذیرند، نه فقط اعداد صحیح یا اعشاری، اگرچه این کار دقت را بهبود نمی‌بخشد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-67795.)

  • تابع bytearray.take_bytes(n=None, /) اضافه شد تا بتوان بایت‌ها را از یک bytearray بدون نیاز به کپی‌کردن برداشت. این امر بهینه‌سازی کدهایی را که باید پس از کار با یک بافر تغییرپذیر از بایت‌ها (مانند بافرکردن داده‌ها، تجزیه‌ی پروتکل شبکه، کدگذاری، کدگشایی و فشرده‌سازی) شیء bytes را برگردانند، ممکن می‌سازد. الگوهای رایج کد که می‌توانند با take_bytes() بهینه‌سازی شوند در ادامه فهرست شده‌اند.

    بازطراحی‌های بهینه‌سازی پیشنهادی

    شرح

    قدیمی

    جدید

    برگرداندن bytes پس از کار با bytearray

    def read() -> bytes:
        buffer = bytearray(1024)
        ...
        return bytes(buffer)
    
    def read() -> bytes:
        buffer = bytearray(1024)
        ...
        return buffer.take_bytes()
    

    خالی کردن یک بافر و دریافت بایت‌ها

    buffer = bytearray(1024)
    ...
    data = bytes(buffer)
    buffer.clear()
    
    buffer = bytearray(1024)
    ...
    data = buffer.take_bytes()
    

    بخش‌بندی یک بافر در یک جداکننده‌ی مشخص

    buffer = bytearray(b'abc\ndef')
    n = buffer.find(b'\n')
    data = bytes(buffer[:n + 1])
    del buffer[:n + 1]
    assert data == b'abc\n'
    assert buffer == bytearray(b'def')
    
    buffer = bytearray(b'abc\ndef')
    n = buffer.find(b'\n')
    data = buffer.take_bytes(n + 1)
    

    بخش‌بندی یک بافر در یک جداکننده‌ی مشخص؛ دور انداختن محتوای پس از جداکننده

    buffer = bytearray(b'abc\ndef')
    n = buffer.find(b'\n')
    data = bytes(buffer[:n])
    buffer.clear()
    assert data == b'abc'
    assert len(buffer) == 0
    
    buffer = bytearray(b'abc\ndef')
    n = buffer.find(b'\n')
    buffer.resize(n)
    data = buffer.take_bytes()
    

    (مشارکت‌کرده توسط Cody Maloney در gh-139871.)

  • بسیاری از توابع مرتبط با کامپایل یا تجزیه‌ی کد پایتون، مانند compile()، ast.parse()، symtable.symtable() و importlib.abc.InspectLoader.source_to_code()، اکنون اجازه می‌دهند نام ماژول ارسال شود. این کار برای فیلتر کردن هشدار‌های نحو بر اساس نام ماژول به شکلی بدون ابهام مورد نیاز است. (مشارکت‌کرده توسط Serhiy Storchaka در gh-135801.)

  • امکان تعریف __slots__های __dict__ و __weakref__ برای هر کلاسی فراهم شد. (مشارکت‌کرده توسط Serhiy Storchaka در gh-41779.)

  • امکان تعریف هر __slots__ برای یک کلاس مشتق‌شده از tuple (از جمله کلاس‌های ایجادشده توسط collections.namedtuple()) فراهم شد. (مشارکت‌کرده توسط Serhiy Storchaka در gh-41779.)

  • نوع slice اکنون از زیرنویسی پشتیبانی می‌کند و آن را به یک نوع عام تبدیل می‌کند. (مشارکت‌کرده توسط James Hilton-Balfe در gh-128335.)

  • کلاس memoryview اکنون از انواع C پیش‌فرض float complex و double complex پشتیبانی می‌کند: به ترتیب با نویسه‌های قالب‌بندی 'Zf' و 'Zd'. (مشارکت‌کرده توسط Victor Stinner در gh-146151 و gh-148675.)

  • اجازه دهید آرگومان (argument) count در متد bytes.replace() به عنوان یک کلیدواژه (keyword) پذیرفته شود. (توسط Stan Ulbrych در gh-147856 مشارکت داده شده است.)

  • علامت مثبت یک‌عملوندی (unary) اکنون در الگوهای لفظی (literal) match پذیرفته می‌شود و از پشتیبانی موجود برای منفی یک‌عملوندی تقلید می‌کند. (توسط Bartosz Sławecki در gh-145239 مشارکت داده شده است.)

  • سیستم ایمپورت (import) اکنون قفل‌های هر ماژول را به ترتیب سلسله‌مراتبی (بسته‌های والد پیش از زیرماژول‌هایشان) به‌دست می‌آورد (acquire). این کار یک بن‌بست (deadlock) دیرینه را برطرف می‌کند که در آن یک نخ (thread) در حال ایمپورت کردن (importing) pkg.sub و نخی دیگر در حال ایمپورت کردن pkg.sub.mod می‌توانستند در صورتی که pkg/sub/__init__.py ماژول pkg.sub.mod را ایمپورت کند، یکدیگر را مسدود کنند. (توسط Gregory P. Smith در gh-83065 مشارکت داده شده است.)

  • نام پرونده‌های (file) افزونه‌های Stable ABI که از پسوند .so استفاده می‌کنند اکنون ممکن است شامل یک چندمعماری (multiarch tuple) باشد، برای نمونه foo.abi3-x86-64-linux-gnu.so. این امر به افزونه‌های پایدار (stable) ABI اجازه می‌دهد تا برای معماری‌های چندگانه در یک پوشه (directory) مشترک نصب شوند، بدون اینکه مانند افزونه‌های پویای (dynamic) معمولی با یکدیگر تداخل داشته باشند. (توسط Stefano Rivera در gh-122931 مشارکت داده شده است.)

  • ویژگی (attribute) __cached__ روی ماژول‌ها که از نسخه‌ی ۳.۱۳ منسوخ شده بود، دیگر توسط سیستم ایمپورت (import) یا کتابخانه‌ی استاندارد تنظیم (set) نشده یا در نظر گرفته نمی‌شود. به جای آن از __spec__.cached استفاده کنید. (توسط Brett Cannon در gh-97879 مشارکت داده شده است.)

    توجه داشته باشید که ویژگی‌های (attributes) __loader__ و __package__ نیز منسوخ (deprecated) شده‌اند و برای حذف برنامه‌ریزی شده‌اند.

پوسته‌ی (shell) تعاملی (interactive) پیش‌فرض

  • تکمیل تب (Tab completions) اکنون بر اساس fancycompleter و بر حسب نوع شیء (object) رنگ‌آمیزی می‌شوند. برای بازگشت به rlcompleter، متغیر PYTHON_BASIC_COMPLETER را تنظیم (set) کنید. همچنین رنگ را می‌توان توسط environment variables کنترل کرد. (توسط Antonio Cuni و Pablo Galindo در gh-130472 مشارکت داده شده است.)

  • تکمیل تب (Tab completion) اکنون ویژگی‌های (attributes) ماژول (module) را در دستورات (statements) from ... import پیشنهاد می‌کند. ویژگی‌ها تنها پس از ایمپورت (import) شدن ماژول قابل پیشنهاد هستند، بنابراین ماژول‌های stdlib به طور خودکار ایمپورت می‌شوند، در حالی که برای سایر ماژول‌ها، تکمیل‌کننده پیشنهاد می‌کند که وقتی کلید Tab برای بار دوم فشرده می‌شود، آن‌ها را ایمپورت کند. (توسط Loïc Simon و Pablo Galindo در gh-140870 مشارکت داده شده است.)

ماژول‌های (modules) جدید

math.integer

این ماژول (module) دسترسی به توابع (functions) ریاضی را برای آرگومان‌های (arguments) عدد صحیح (integer) فراهم می‌کند (PEP 791). (توسط Serhiy Storchaka در gh-81313 مشارکت داده شده است.)

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

argparse

  • اکشن (action) BooleanOptionalAction اکنون از گزینه‌های طولانی خط تیره تکی و نویسه‌های (characters) پیشوند جایگزین پشتیبانی می‌کند. (توسط Serhiy Storchaka در gh-138525 مشارکت داده شده است.)

  • مقدار پیش‌فرض پارامتر (parameter) suggest_on_error در argparse.ArgumentParser به True تغییر یافت. این کار پیشنهادها را برای آرگومان‌های (arguments) اشتباه تایپ‌شده به طور پیش‌فرض فعال می‌کند. (توسط Jakob Schluse در gh-140450 مشارکت داده شده است.)

  • پشتیبانی از نشانه‌گذاری بک‌تیک در متن توضیحات و پایانی (epilog) ArgumentParser اضافه شد تا هنگام فعال بودن خروجی رنگی، کد درون‌خطی برجسته شود. (توسط Savannah Ostrowski در gh-142390 مشارکت داده شده است.)

  • نشانه‌گذاری بک‌تیک به متن help آرگومان (argument) گسترش یافت و پشتیبانی از بک‌تیک‌های دوگانه (سبک RST inline-literal) اضافه شد. (توسط Hugo van Kemenade در gh-149375 مشارکت داده شده است.)

array

  • پشتیبانی از انواع (types) C به نام‌های float complex و double complex: نویسه‌های (characters) قالب‌بندی به ترتیب 'Zf' و 'Zd'. (توسط Victor Stinner در gh-146151 و gh-148675 مشارکت داده شده است.)

  • پشتیبانی از اعداد اعشاری نیم‌دقت (فرمت تبادل دودویی ۱۶ بیتی IEEE 754): نویسه‌ی قالب‌بندی 'e'. (مشارکت‌کننده: Sergey B Kirpichev در gh-146238.)

  • نوع داده‌ی array.typecodes از str به tuple تغییر کرد تا از کدهای نوع طولانی‌تر از ۱ نویسه (Zf و Zd) پشتیبانی کند. (مشارکت‌کننده: Victor Stinner در gh-148675.)

ast

  • پارامتر color به dump() اضافه شد. اگر True باشد، رشته‌ی بازگردانده‌شده با استفاده از دنباله‌های گریز ANSI برجسته‌سازی نحوی می‌شود. اگر False باشد (پیش‌فرض)، خروجی رنگی همیشه غیرفعال است. (مشارکت‌کننده: Stan Ulbrych در gh-148981.)

  • خروجی command-line اکنون به‌طور پیش‌فرض برجسته‌سازی نحوی می‌شود. این کار را می‌توان با استفاده از متغیرهای محیطی کنترل کرد. (مشارکت‌کننده: Stan Ulbrych در gh-148981.)

asyncio

  • متد TaskGroup.cancel اضافه شد تا امکان پایان زودهنگام یک گروه وظیفه فراهم شود؛ برای مثال، زمانی که هدف وظایف محقق شده است یا خدمات آن‌ها دیگر مورد نیاز نیست. پیش از این، این کار مستلزم کدهای پیش‌ساخته‌ی غیرشهودی مانند یک وظیفه‌ی اضافی بود که یک استثنای سفارشی را ایجاد می‌کند و سپس با خروج از گروه وظیفه، سرکوب می‌شود. (مشارکت‌کننده: John Belmonte در gh-127214.)

base64

binascii

  • توابع برای کدگذاری Base32 اضافه شدند:

    (مشارکت‌کننده: James Seo در gh-146192.)

  • توابع برای کدگذاری Ascii85، Base85 و Z85 اضافه شدند:

    (مشارکت‌کرده توسط جیمز سو (James Seo) و سرهی استورچاک (Serhiy Storchaka) در gh-101178.)

  • پارامتر padded به b2a_base32()، a2b_base32()، b2a_base64() و a2b_base64() اضافه شد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-73613.)

  • پارامتر wrapcol به b2a_base64() اضافه شد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-143214.)

  • پارامتر alphabet به b2a_base64() و a2b_base64() اضافه شد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-145980.)

  • پارامتر ignorechars به a2b_hex()، unhexlify() و a2b_base64() اضافه شد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-144001 و gh-146431.)

  • پارامتر canonical به a2b_base64() اضافه شد تا کدنوشته‌های دارای بیت‌های پُراکنده‌ی غیرصفر را رد کند. (مشارکت‌کرده توسط گرگوری پی. اسمیت (Gregory P. Smith) در gh-146311.)

گاه‌شماری

  • خروجی متنی خط فرمان command-line ماژول calendar رنگ بیشتری دارد. این ویژگی را می‌توان با environment variables کنترل کرد. (مشارکت‌کرده توسط هوگو وان کمیناد (Hugo van Kemenade) در gh-148352.)

  • خروجی HTML خط فرمان command-line ماژول calendar اکنون گزینه‌ی سال-ماه را می‌پذیرد: python -m calendar -t html 2009 06. (مشارکت‌کرده توسط پال گروناس درانژ (Pål Grønås Drange) در gh-140212.)

  • صفحات تقویم تولیدشده توسط کلاس calendar.HTMLCalendar اکنون از حالت تاریک پشتیبانی می‌کنند و برای بهبود دسترسی‌پذیری به استاندارد HTML5 مهاجرت کرده‌اند. (مشارکت‌کرده توسط جیاهاو لی (Jiahao Li) و هوگو وان کمیناد (Hugo van Kemenade) در gh-137634.)

مجموعه‌ها (collections)

  • متدهای collections.Counter.__xor__() و collections.Counter.__ixor__() برای محاسبه‌ی تفاضل متقارن بین اشیای Counter اضافه شدند. (مشارکت‌کرده توسط ریموند هتینگر (Raymond Hettinger) در gh-138682.)

concurrent.futures

  • گزارش خطا هنگام خاتمه‌ی ناگهانی یک فرایند فرزند در concurrent.futures.ProcessPoolExecutor بهبود یافته است. ردگیری (traceback) حاصل اکنون شناسه فرایند (PID) و کد خروج فرایند خاتمه‌یافته را به شما می‌گوید. (مشارکت‌کرده توسط جاناتان برگ (Jonathan Berg) در gh-139486.)

contextlib

  • پشتیبانی از توصیف‌گرهای دلخواه __enter__()، __exit__()، __aenter__() و __aexit__() در ExitStack و contextlib.AsyncExitStack، برای سازگاری با دستورهای with و async with اضافه شد. (مشارکت‌کرده توسط سرهی استورچاک (Serhiy Storchaka) در gh-144386.)

  • توابع ContextDecorator و AsyncContextDecorator (و در نتیجه contextmanager() و asynccontextmanager() که به عنوان دکوراتور استفاده می‌شوند) اکنون توابع تولیدگر (generator)، توابع هم‌روال (coroutine) و توابع تولیدگر ناهمگام را شناسایی کرده و مدیر زمینه را در طول پیمایش یا await باز نگه می‌دارند. پیش از این، مدیر زمینه به محض ایجاد شیء تولیدگر یا هم‌روال خارج می‌شد. (مشارکت‌کرده توسط الکس گرونهولم (Alex Grönholm) و گرگوری پی. اسمیت (Gregory P. Smith) در gh-125862.)

ctypes

dataclasses

  • حاشیه‌نویسی‌های متدهای تولیدشده‌ی __init__ دیگر شامل نام‌های نوع داخلی نمی‌شوند. (مشارکت توسط دیوید الیس (David Ellis) در gh-137530.)

dbm

  • متدهای جدید reorganize() به dbm.dumb و dbm.sqlite3 اضافه شدند تا فضای خالی استفاده‌نشده‌ای که پیش‌تر توسط درایه‌های حذف‌شده اشغال شده بود، بازیابی شود. (مشارکت توسط آندره‌آ اولیری (Andrea Oliveri) در gh-134004.)

difflib

  • پارامتر اختیاری color به تابع difflib.unified_diff() اضافه شد که امکان خروجی رنگی مشابه git diff را فراهم می‌کند. این مورد را می‌توان از طریق متغیرهای محیطی کنترل کرد. (مشارکت توسط داگلاس تور (Douglas Thor) در gh-133725.)

  • استایل‌دهی صفحات تفاوت HTML تولیدشده توسط کلاس difflib.HtmlDiff بهبود یافت و خروجی به استاندارد HTML5 مهاجرت کرد. (مشارکت توسط جیاهائو لی (Jiahao Li) در gh-134580.)

email

  • تولیدگرهای ایمیل اکنون زمانی که یک EmailMessage به دلیل وجود یک آدرس ایمیل (صندوق پستی) غیر اسکی در سرآیند آدرس نتواند به دقت تخت‌سازی (flatten) شود، خطایی را بالا می‌آورند. گزینه‌های پشتیبانی از بین‌المللی‌سازی آدرس ایمیل (EAI) در EmailPolicy.utf8 بحث شده‌اند. (مشارکت توسط آر. دیوید ماری (R David Murray) و مایک ادموندز (Mike Edmunds) در gh-122540.)

faulthandler

functools

  • متد singledispatchmethod() اکنون از فراخوانی‌پذیرهای غیر توصیف‌گر پشتیبانی می‌کند. (مشارکت توسط سرهی استورچاک (Serhiy Storchaka) در gh-140873.)

  • متد singledispatchmethod() اکنون اگر یک متد معمولی را پوشش دهد و به عنوان یک ویژگی کلاس فراخوانی شود، روی آرگومان دوم توزیع انجام می‌دهد. (مشارکت توسط بارتوش اسلاوکی (Bartosz Sławecki) در gh-143535.)

gc

  • پایتون 3.14.0 تا 3.14.4 با یک جمع‌آورنده‌ی زباله‌ی افزایشی جدید عرضه شد. با این حال، به دلیل تعدادی از گزارش‌ها درباره فشار حافظه قابل توجه در محیط‌های پروداکشن، به جمع‌آورنده‌ی زباله نسلی نسخه‌ی 3.13 بازگردانده شد. این همان جمع‌آورنده‌ی زباله‌ای است که اکنون در پایتون 3.14.5 و نسخه‌های بعد از آن و همچنین پایتون 3.15 استفاده می‌شود. (مشارکت توسط سرگی میریانوف (Sergey Miryanov) در gh-148726.)

hashlib

  • اطمینان حاصل کنید توابع هش که تضمین شده است همیشه موجود باشند، به عنوان ویژگی‌های hashlib وجود دارند، حتی اگر در زمان اجرا (runtime) به دلیل عدم وجود پیاده‌سازی‌های بک‌اند کار نکنند. به عنوان مثال، اگر OpenSSL موجود نباشد و پایتون بدون پشتیبانی از MD5 ساخته شده باشد، hashlib.md5 دیگر خطای AttributeError را بالا نخواهد آورد. (مشارکت توسط بندیک تران (Bénédikt Tran) در gh-136929.)

http.client

  • یک پارامتر جدید فقط-کلیدواژه به نام max_response_headers به سازنده‌های HTTPConnection و HTTPSConnection اضافه شده است. این پارامتر حداکثر تعداد مجاز پیش‌فرض برای سرآیندهای پاسخ را بازنویسی می‌کند. (مشارکت توسط الکساندر انریکه اوریلس نیتو (Alexander Enrique Urieles Nieto) در gh-131724.)

http.server

  • گزارش‌گیری (BaseHTTPRequestHandler)، که توسط رابط خط فرمان استفاده می‌شود، به‌طور پیش‌فرض رنگی است. این ویژگی را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت توسط Hugo van Kemenade در gh-146292.)

  • اضافه شدن default_content_type و گزینه‌ی خط فرمان --content-type برای امکان سفارشی‌سازی سرآیند پیش‌فرض Content-Type برای پرونده‌هایی با پسوندهای ناشناخته. (مشارکت توسط John Comeau و Hugo van Kemenade در gh-113471.)

  • اضافه شدن آرگومان کلیدواژه‌ای extra_response_headers جدید به SimpleHTTPRequestHandler برای پشتیبانی از سرآیندهای اختصاصی در پاسخ‌های HTTP. (مشارکت توسط Anton I. Sipos در gh-135057.)

  • اضافه شدن گزینه‌ی -H/--header به رابط خط فرمان python -m http.server برای پشتیبانی از سرآیندهای اختصاصی در پاسخ‌های HTTP. (مشارکت توسط Anton I. Sipos در gh-135057.)

importlib.metadata

  • پیش‌تر، هنگام دسترسی به یک پوشه‌ی فراداده‌ی توزیع که حاوی پرونده‌ی فراداده نبود، توابع metadata() و Distribution.metadata یک شیء خالی PackageMetadata را برمی‌گرداندند، گویی که پرونده موجود اما خالی است. اکنون، یک استثنای MetadataNotFound بالا آورده می‌شود. برای اطلاعات بیشتر درباره‌ی پس‌زمینه و توجیه منطقی به importlib_metadata#493 و برای توجیه منطقی درباره‌ی مسائل سازگاری به gh-143387 مراجعه کنید. (مشارکت توسط Jason R. Coombs.)

inspect

  • اضافه شدن پارامترهای inherit_class_doc و fallback_to_class_doc برای getdoc(). (مشارکت توسط Serhiy Storchaka در gh-132686.)

json

  • اضافه شدن پارامتر array_hook به توابع load() و loads(): امکان استفاده از یک فراخوانی بازگشتی برای انواع آرایه‌های لفظی JSON جهت سفارشی‌سازی فهرست‌های پایتون در شیء رمزگشایی‌شده‌ی حاصل. ارسال ترکیب frozendict به پارامتر object_pairs_hook و tuple به array_hook، یک ساختار پایتون تغییرناپذیرِ عمیقاً تودرو را تولید می‌کند که داده‌های JSON را نمایش می‌دهد. (مشارکت توسط Joao S. O. Bueno در gh-146440.)

locale

  • setlocale() اکنون از کدهای زبان دارای اصلاح‌گرهای @ پشتیبانی می‌کند. اصلاح‌گرهای @ دیگر به‌طور خاموش در getlocale() حذف نمی‌شوند، بلکه در کد زبان گنجانده می‌شوند. (مشارکت توسط Serhiy Storchaka در gh-137729.)

  • خارج کردن تابع locale.getdefaultlocale() از حالت منسوخ. (مشارکت توسط Victor Stinner در gh-130796.)

math

mimetypes

  • اضافه شدن انواع MIME بیشتر. (مشارکت توسط Benedikt Johannes، Charlie Lin، Foolbar، Gil Forcada و John Franey در gh-144217، gh-145720، gh-140937، gh-139959، gh-145698، gh-145718، gh-145918 و gh-144213.)

  • تغییر نام application/x-texinfo به application/texinfo. (مشارکت توسط Charlie Lin در gh-140165.)

  • تغییر نوع MIME برای پرونده‌های .ai به application/pdf. (مشارکت توسط Stan Ulbrych در gh-141239.)

mmap

  • mmap.mmap اکنون دارای یک پارامتر trackfd در ویندوز است؛ اگر مقدار آن False باشد، دسته‌ی پرونده‌ی متناظر با fileno تکثیر نخواهد شد. (مشارکت توسط Serhiy Storchaka در gh-78502.)

  • متد mmap.mmap.set_name() برای حاشیه‌نویسی کردن یک نگاشت حافظه‌ی ناشناس اضافه شد، در صورتی که هسته‌ی لینوکس از PR_SET_VMA_ANON_NAME پشتیبانی کند (لینوکس ۵.۱۷ یا جدیدتر). (مشارکت توسط Donghee Na در gh-142419.)

os

  • تابع os.statx() در نسخه‌های ۴.۱۱ و پس از آنِ هسته‌ی لینوکس با نسخه‌های ۲.۲۸ و پس از آنِ glibc اضافه شد. (مشارکت توسط Jeffrey Bosboom و Victor Stinner در gh-83714.)

  • تابع os.makedirs() اکنون دارای یک پارامتر parent_mode است که امکان تعیین حالت را برای دایرکتوری‌های میانی فراهم می‌کند. از این ویژگی می‌توان برای مطابقت با رفتار نسخه‌ی ۳.۶ و پیش از آن پایتون با ارسال parent_mode=mode استفاده کرد. (مشارکت توسط Zackery Spytz و Gregory P. Smith در gh-86533.)

os.path

  • پشتیبانی از حالت همه به جز آخرین (all-but-last) در realpath() اضافه شد. (مشارکت توسط Serhiy Storchaka در gh-71189.)

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

pathlib

  • متد pathlib.Path.mkdir() اکنون دارای یک پارامتر parent_mode است که اجازه می‌دهد حالت دایرکتوری‌های میانی هنگام استفاده از parents=True مشخص شود. (مشارکت توسط Gregory P. Smith در gh-86533.)

pdb

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

pickle

  • پشتیبانی از پیکل‌کردن متدهای خصوصی و کلاس‌های تو در تو اضافه شد. (مشارکت توسط Zackery Spytz و Serhiy Storchaka در gh-77188.)

pickletools

  • خروجی رابط خط فرمان pickletools به طور پیش‌فرض رنگی است. این مورد را می‌توان با environment variables کنترل کرد. (مشارکت توسط Hugo van Kemenade در gh-149026.)

pprint

  • یک آرگومان کلیدواژه‌ای expand برای pprint.pprint()، pprint.pformat() و pprint.pp() اضافه شد. اگر مقدار آن درست (true) باشد، خروجی مشابه چاپ زیبا (pretty-printed) تابع json.dumps() هنگامی که indent ارائه شده است، قالب‌بندی خواهد شد. (مشارکت توسط Stefan Todoran، Semyon Moroz و Hugo van Kemenade در gh-112632.)

  • پشتیبانی از تی‌استرینگ به pprint اضافه شد. (مشارکت توسط Loïc Simon و Hugo van Kemenade در gh-134551.)

re

  • توابع re.prefixmatch() و re.Pattern.prefixmatch() به عنوان نام‌های جایگزین و صریح‌تر برای APIهای موجود و اکنون منسوخ‌نشانه re.match() و re.Pattern.match() اضافه شده‌اند. این موارد به این منظور در نظر گرفته شده‌اند که با پیروی از شعار ذن پایتون «صریح بودن بهتر از ضمنی بودن است»، سردرگمی پیرامون معنای match را کاهش دهند. بیشتر کتابخانه‌های عبارت باقاعده در زبان‌های دیگر از یک API به نام match برای معنایی استفاده می‌کنند که پایتون همیشه آن را search نامیده است. (مشارکت توسط Gregory P. Smith در gh-86519.)

resource

shelve

  • افزودن متد جدید reorganize() به ماژول shelve که برای بازیابی فضای آزاد استفاده‌نشده‌ی اشغال‌شده‌ی قبلی توسط شناسه‌های حذف‌شده به کار می‌رود. (مشارکت توسط Andrea Oliveri در gh-134004.)

  • افزودن پشتیبانی برای توابع سریال‌سازی و سریال‌زدایی سفارشی در ماژول shelve. (مشارکت توسط Furkan Onder در gh-99631.)

socket

  • افزودن ثابت‌ها برای پروتکل ISO-TP CAN. (مشارکت توسط Patrick Menschel و Stefan Tatschner در gh-86819.)

sqlite3

  • رابط خط فرمان command-line interface چندین ویژگی جدید دارد:

    • تکمیل کلیدواژه‌ی SQL روی کلید Tab. (مشارکت توسط Long Tan در gh-133393.)

    • اعلان‌ها، پیام‌های خطا و متن راهنما اکنون رنگی شده‌اند. این ویژگی به‌طور پیش‌فرض فعال است، برای جزئیات کنترل رنگ را ببینید. (مشارکت توسط Stan Ulbrych و Łukasz Langa در gh-133461.)

    • تکمیل جدول، اندیس، تریگر، نما، ستون، تابع و شما روی کلید Tab. (مشارکت توسط Long Tan در gh-136101.)

ssl

  • نشان دادن این موضوع از طریق ssl.HAS_PSK_TLS13 که آیا ماژول ssl از «PSKهای خارجی» در TLSv1.3 پشتیبانی می‌کند یا خیر، همان‌طور که در RFC 9258 توصیف شده است. (مشارکت توسط Will Childs-Klein در gh-133624.)

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

    • متد ssl.SSLContext.set_groups() گروه‌های مجاز برای انجام توافق کلید را تنظیم می‌کند و متد قبلی ssl.SSLContext.set_ecdh_curve() را گسترش می‌دهد. این API جدید توانایی فهرست کردن چندین گروه را فراهم می‌کند و علاوه بر منحنی‌های ECDH، از گروه‌های با فیلد ثابت و پساکوانتومی نیز پشتیبانی می‌کند. همچنین می‌توان از این متد برای کنترل اشتراک‌گذاری‌های کلیدی که در دست‌دهی TLS ارسال می‌شوند، استفاده کرد.

    • متد ssl.SSLSocket.group() گروه انتخاب‌شده برای انجام توافق کلید روی اتصال فعلی را پس از اتمام دست‌دهی TLS برمی‌گرداند. این فراخوانی به OpenSSL نسخه ۳.۲ یا بالاتر نیاز دارد.

    • متد ssl.SSLContext.get_groups() فهرستی از تمام گروه‌های توافق کلید موجود سازگار با نسخه‌های حداقل و حداکثر TLS که در حال حاضر در زمینه تنظیم شده‌اند را برمی‌گرداند. این فراخوانی به OpenSSL نسخه ۳.۵ یا بالاتر نیاز دارد.

    (مشارکت توسط Ron Frederick در gh-136306.)

  • متد جدیدی به نام ssl.SSLContext.set_ciphersuites() برای تنظیم رمزهای TLS 1.3 اضافه شد. برای TLS 1.2 یا نسخه‌های قبلی، باید همچنان از ssl.SSLContext.set_ciphers() استفاده شود. هر دو فراخوانی را می‌توان روی یک زمینه انجام داد و مجموعه‌ی رمز انتخاب‌شده به نسخه‌ی TLS مورد توافق هنگام برقراری اتصال بستگی خواهد داشت. (مشارکت توسط Ron Frederick در gh-137197.)

  • متدهای جدیدی برای مدیریت الگوریتم‌های امضا اضافه شدند:

    • تابع ssl.get_sigalgs() فهرستی از تمام الگوریتم‌های امضای TLS موجود را برمی‌گرداند. این فراخوانی به OpenSSL نسخه ۳.۴ یا بالاتر نیاز دارد.

    • متد ssl.SSLContext.set_client_sigalgs() الگوریتم‌های امضای مجاز برای احراز هویت کلاینت مبتنی بر گواهی را تنظیم می‌کند.

    • متد ssl.SSLContext.set_server_sigalgs() الگوریتم‌های امضای مجاز برای سرور جهت تکمیل دست‌دهی TLS را تنظیم می‌کند.

    • متد ssl.SSLSocket.client_sigalg() الگوریتم امضای انتخاب‌شده برای احراز هویت کلاینت در اتصال فعلی را برمی‌گرداند. این فراخوانی به OpenSSL نسخه ۳.۵ یا بالاتر نیاز دارد.

    • متد ssl.SSLSocket.server_sigalg() الگوریتم امضای انتخاب‌شده برای سرور جهت تکمیل دست‌دهی TLS در اتصال فعلی را برمی‌گرداند. این فراخوانی به OpenSSL نسخه ۳.۵ یا بالاتر نیاز دارد.

    (مشارکت توسط Ron Frederick در gh-138252.)

subprocess

  • subprocess.Popen.wait(): هنگامی که timeout برابر با None نباشد و پلتفرم از آن پشتیبانی کند، از یک مکانیزم رویدادمحور کارآمد برای انتظار جهت پایان یافتن فرایند استفاده می‌شود:

    • لینوکس ۵.۳ به بالا از os.pidfd_open() + select.poll() استفاده می‌کند.

    • سیستم‌عامل macOS و سایر انواع BSD از select.kqueue() + KQ_FILTER_PROC + KQ_NOTE_EXIT استفاده می‌کنند.

    • ویندوز همچنان از WaitForSingleObject استفاده می‌کند (بدون تغییر).

    اگر هیچ‌کدام از این مکانیزم‌ها در دسترس نباشند، تابع به حلقه‌ی مشغول سنتی (فراخوانی غیرمسدودکننده و توقف‌های کوتاه) بازمی‌گردد. (مشارکت توسط Giampaolo Rodola در gh-83069.)

symtable

sys

  • فضای نام sys.abi_info برای بهبود دسترسی به اطلاعات ABI اضافه شد. (مشارکت توسط Klaus Zimmermann در gh-137476.)

sys.monitoring

  • اکنون می‌توان سایر رویدادها (PY_THROW، PY_UNWIND، RAISE، EXCEPTION_HANDLED و RERAISE) را بر اساس هر شیء کد (code object) فعال یا غیرفعال کرد. بازگرداندن DISABLE از یک کال‌بک برای یکی از این رویدادها، به‌جای بالا آوردن ValueError مانند نسخه‌های پیشین، آن رویداد را برای کل شیء کد (برای ابزار فعلی) غیرفعال می‌کند. (مشارکت از Gabriele N. Tornetta در gh-146182.)

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.)

  • متدهای extract() و extractall() اکنون در ویندوز، اسلش‌ها را در هدف‌های پیوند نمادین با بک‌اسلش جایگزین می‌کنند تا از ایجاد پیوندهای خراب جلوگیری شود. (مشارکت از Christoph Walcher در gh-57911.)

  • متد gettarinfo() اکنون در ویندوز، بک‌اسلش‌ها را در هدف‌های پیوند نمادین با اسلش جایگزین می‌کند تا با استاندارد قالب tar مطابقت داشته باشد. (مشارکت از Daniele Nicolodi در gh-151669.)

threading

timeit

  • خروجی رابط خط فرمان timeit به طور پیش‌فرض رنگی است. این ویژگی را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت از Hugo van Kemenade در gh-146609.)

  • رابط خط فرمان اکنون به طور پیش‌فرض ردگیری‌های خطا را رنگی می‌کند. این ویژگی را می‌توان با متغیرهای محیطی کنترل کرد. (مشارکت از Yi Hong در gh-139374.)

  • زمان هدف متد timeit.Timer.autorange() قابل تنظیم شد و گزینه‌ی --target-time به رابط خط فرمان اضافه شد. (مشارکت از Alessandro Cucci و Miikka Koskinen در gh-80642.)

tkinter

  • متد tkinter.Text.search() اکنون از دو آرگومان اضافی پشتیبانی می‌کند: nolinestop که به جستجو اجازه می‌دهد از مرزهای سطر عبور کند؛ و strictlimits که جستجو را به محدوده‌ی مشخص‌شده محدود می‌کند. (مشارکت از Rihaan Meher در gh-130848.)

  • متد جدیدی به نام tkinter.Text.search_all() معرفی شده است. این متد به شما اجازه می‌دهد با استفاده از گزینه‌های -all و -overlap در Tcl، تمام موارد تطابق یک الگو را جستجو کنید. (مشارکت از Rihaan Meher در gh-130848.)

  • متدهای جدید pack_content()، place_content() و grid_content() اضافه شدند که از دستورات Tk با نام‌های جدید (معرفی‌شده در Tk 8.6) به‌جای متدهای *_slaves() که از دستورات Tk با نام‌های قدیمی استفاده می‌کنند، بهره می‌برند. (مشارکت از Serhiy Storchaka در gh-143754.)

  • ویژگی‌های user_data برای رویدادهای مجازی Tk و detail برای رویدادهای Enter، Leave، FocusIn، FocusOut و ConfigureRequest به کلاس Event اضافه شدند. (مشارکت از Matthias Kievernagel و Serhiy Storchaka در gh-47655.)

tokenize

tomllib

  • ماژول tomllib اکنون از TOML 1.1.0 پشتیبانی می‌کند. این یک به‌روزرسانی سازگار با گذشته است، به این معنا که تمام سندهای معتبر TOML 1.0.0 به همان شکل تجزیه می‌شوند.

    تغییرات، براساس ثبت تغییرات رسمی TOML، به شرح زیر است:

    • اجازه دادن به خطوط جدید و کامای پایانی در جدول‌های خطی (inline tables).

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

      tbl = {
         key      = "a string",
         moar-tbl =  {
            key = 1,
         },
      }
      
    • افزودن نماد \xHH به رشته‌های پایه برای نقطه‌کدهای زیر ۲۵۵، و نماد گریز \e برای نویسه‌ی گریز:

      null = "null byte: \x00; letter a: \x61"
      csi = "\e["
      
    • ثانیه‌ها در مقادیر تاریخ و زمان (datetime و time) اکنون اختیاری هستند. مقادیر زیر اکنون معتبرند:

      dt = 2010-02-03 14:15
      t  = 14:15
      

    (مشارکت توسط Taneli Hukkinen در gh-142956.)

types

  • قرار دادن نوع پراکسی locals() با قابلیت نوشتن‌همزمان به عنوان types.FrameLocalsProxyType. این مورد نشان‌دهنده‌ی نوع ویژگی frame.f_locals است، همان‌طور که در PEP 667 توصیف شده است. (مشارکت توسط Peter Bierma در gh-136492.)

typing

  • PEP 747: افزودن TypeForm، یک فرم ویژه‌ی جدید برای حاشیه‌نویسی مقادیری که خودشان عبارت‌های نوع هستند. عبارت TypeForm[T] به معنای «یک شیء فرم نوع توصیف‌کننده‌ی T (یا نوعی قابل انتساب به T)» است. در هنگام اجرا، TypeForm(x) به سادگی x را برمی‌گرداند، که این امر اجازه می‌دهد حاشیه‌نویسی صریح مقادیر نوع‌فرم بدون تغییر رفتار انجام شود.

    این کار به کتابخانه‌هایی که عبارت‌های نوع ارائه‌شده توسط کاربر (برای مثال int، str | None، کلاس‌های TypedDict یا list[int]) را می‌پذیرند، کمک می‌کند تا امضاهای دقیقی را ارائه دهند:

    from typing import Any, TypeForm
    
    def cast[T](typ: TypeForm[T], value: Any) -> T: ...
    

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

  • PEP 728: افزودن پشتیبانی در TypedDict برای آرگومان‌های کلاس closed و extra_items. یک TypedDict بسته (closed) اجازه نمی‌دهد کلیدهای اضافی فراتر از موارد مشخص‌شده در بدنه کلاس وجود داشته باشد، در حالی که یک TypedDict دارای extra_items اجازه می‌دهد آیتم‌های اضافی دلخواهی که مقادیر آن‌ها از نوع مشخص‌شده هستند وجود داشته باشند. (مشارکت توسط Angela Liss در gh-137840.)

  • کدهایی مانند class ExtraTypeVars(P1[S], Protocol[T, T2]): ... اکنون یک TypeError بالا می‌آورند؛ زیرا S در پارامترهای Protocol فهرست نشده است. (مشارکت توسط Nikita Sobolev در gh-137191.)

  • کدهایی مانند class B2(A[T2], Protocol[T1, T2]): ... اکنون ترتیب پارامترهای نوع را به درستی مدیریت می‌کنند: ترتیب آن (T1, T2) است، نه (T2, T1) که پیش‌تر به صورت نادرست در ران‌تایم استنتاج می‌شد. (مشارکت توسط Nikita Sobolev در gh-137191.)

  • PEP 800: افزودن @typing.disjoint_base، یک دکوراتور جدید که کلاسی را به عنوان یک پایه مجزا علامت‌گذاری می‌کند. این یک ویژگی پیشرفته است که در درجه‌ی اول برای این منظور در نظر گرفته شده است تا به بررسی‌کنندگان نوع اجازه دهد معناشناسی ران‌تایم انواعی را که به عنوان توکار یا در افزونه‌های کامپایل‌شده تعریف شده‌اند، به طور دقیق منعکس کنند. اگر کلاسی مانند C یک پایه مجزا باشد، کلاس‌های فرزند آن کلاس نمی‌توانند از پایه‌های مجزای دیگری که کلاس‌های والد یا فرزند C نیستند، ارث‌بری کنند. (مشارکت توسط Jelle Zijlstra در gh-148639.)

  • TypeVarTuple اکنون آرگومان‌های کلیدواژه‌ای bound، covariant، contravariant و infer_variance را می‌پذیرد که با رابط TypeVar و ParamSpec مطابقت دارد. معناشناسی bound در مشخصات تعریف‌نشده باقی می‌ماند.

unicodedata

unittest

  • unittest.TestCase.assertLogs() از این به بعد یک قالب‌بند را برای کنترل نحوه‌ی قالب‌بندی پیام‌ها می‌پذیرد. (مشارکت توسط Garry Cairns در gh-134567.)

  • unittest.TestCase.assertWarns() و unittest.TestCase.assertWarnsRegex() دیگر هشدارهایی را که با دسته‌ی مشخص‌شده یا عبارت باقاعده مطابقت ندارند، نادیده نمی‌گیرند. مدیر زمینه‌های تورتوپر اکنون پشتیبانی می‌شوند. (مشارکت توسط Serhiy Storchaka در gh-143231.)

urllib.parse

  • افزودن پارامتر missing_as_none به توابع urlsplit()، urlparse() و urldefrag(). افزودن پارامتر keep_empty به توابع urlunsplit() و urlunparse(). این کار امکان تمایز بین اجزای URI خالی و تعریف‌نشده و حفظ اجزای خالی را فراهم می‌کند. (مشارکت توسط Serhiy Storchaka در gh-67041.)

venv

  • در سکوهای POSIX، هنگام ایجاد محیط‌های مجازی، پوشه‌های platlib در صورت نیاز ایجاد خواهند شد، به جای اینکه از پیوند نمادین lib64 -> lib استفاده شود. این بدین معناست که در سکوهایی که sys.platlibdir برابر با lib نیست، پوشه‌های purelib و platlib در محیط‌های مجازی دیگر پوشه‌ی lib یکسانی را به اشتراک نمی‌گذارند. (مشارکت توسط Rui Xi در gh-133951.)

warnings

  • بهبود صافی‌سازی (فیلتر کردن) بر اساس ماژول در warnings.warn_explicit() در صورتی که هیچ آرگومان module ارسال نشود. این تابع اکنون عبارت باقاعده‌ی ماژول را در صافی هشدارها نه تنها در برابر نام پرونده با حذف .py، بلکه در برابر نام‌های ماژول ساخته‌شده از پوشه‌های والد مختلفِ نام پرونده (با حذف /__init__.py، .py و در ویندوز .pyw) می‌آزماید. (مشارکت توسط Serhiy Storchaka در gh-135801.)

wave

  • پشتیبانی از صدای WAVE با اعشار شناور IEEE (WAVE_FORMAT_IEEE_FLOAT) به wave اضافه شد.

  • توابع wave.Wave_read.getformat()، wave.Wave_write.getformat() و wave.Wave_write.setformat() برای مدیریت صریح قالب قاب اضافه شدند.

  • متد wave.Wave_write.setparams() برای سازگاری با نسخه‌های قبلی، هم تاپل‌های ۷ آیتمی شامل format و هم تاپل‌های ۶ آیتمی را می‌پذیرد (که به طور پیش‌فرض روی WAVE_FORMAT_PCM تنظیم می‌شوند).

  • خروجی WAVE_FORMAT_IEEE_FLOAT اکنون شامل یک بخش fact است، همان‌طور که برای قالب‌های WAVE غیر PCM لازم است.

(مشارکت‌کرده توسط Lionel Koenig و Michiel W. Beijen در gh-60729.)

webbrowser

  • روی سیستم‌عامل macOS، کلاس جدید webbrowser.MacOS نشانی‌های وب را به جای ساخت و اجرای AppleScript از طریق osascript، با استفاده از /usr/bin/open باز می‌کند. مرورگر پیش‌فرض از پرونده‌ی تنظیمات LaunchServices با استفاده از plistlib شناسایی می‌شود و کلاس com.apple.Safari به عنوان مرورگر جایگزین در نصب‌های تازه در نظر گرفته می‌شود. برای نشانی‌های وب غیر HTTP(S)، از open -b <bundle-id> برای هدایت نشانی وب از طریق یک مرورگر به جای هندلر پرونده‌ی سیستم‌عامل استفاده می‌شود تا از حملات تزریق پرونده جلوگیری شود. (مشارکت‌کرده توسط Jeff Lyon در gh-137586.)

xml

  • تابع xml.is_valid_name() اضافه شد تا بررسی کند آیا می‌توان از یک رشته به عنوان نام یک عنصر یا ویژگی در XML استفاده کرد یا خیر. (مشارکت‌کرده توسط Serhiy Storchaka در gh-139489.)

  • تابع xml.is_valid_text() اضافه شد تا بررسی کند آیا می‌توان از یک رشته در یک سند XML استفاده کرد یا خیر. (مشارکت‌کرده توسط Serhiy Storchaka در gh-139489.)

xml.parsers.expat

zlib

  • امکان ترکیب دو جمع‌آزمای Adler-32 از طریق adler32_combine() فراهم شد. (مشارکت‌کرده توسط Callum Attryde و Bénédikt Tran در gh-134635.)

  • امکان ترکیب دو جمع‌آزمای CRC-32 از طریق crc32_combine() فراهم شد. (مشارکت‌کرده توسط Bénédikt Tran در gh-134635.)

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

  • کتابخانه‌ی mimalloc اکنون به عنوان تخصیص‌دهنده‌ی پیش‌فرض برای تخصیص‌های حافظه‌ی خام، مانند مواردی که از طریق PyMem_RawMalloc() انجام می‌شوند، برای عملکرد بهتر در ساخت نخ‌آزاد استفاده می‌شود. (مشارکت‌کرده توسط Kumar Aditya در gh-144914.)

base64 و binascii

  • پیاده‌سازی زیربنایی base64 در سی‌پایتون اکنون به لطف بهینه‌سازی‌های ساده‌ی پایپ‌لاین CPU، با سرعت ۲ برابر بیشتر کدگذاری و ۳ برابر سریع‌تر کدگشایی می‌کند. (مشارکت‌کرده توسط Gregory P. Smith و Serhiy Storchaka در gh-143262.)

  • پیاده‌سازی کدگذاری‌های Ascii85، Base85 و Z85 به زبان C بازنویسی شده است. کدگذاری و کدگشایی اکنون دو مرتبه بزرگی سریع‌تر شده‌اند و دو مرتبه بزرگی حافظه‌ی کمتری مصرف می‌کنند. (مشارکت‌کرده توسط James Seo و Serhiy Storchaka در gh-101178.)

  • پیاده‌سازی Base32 با زبان C بازنویسی شده است. کدگذاری و کدگشایی اکنون دو مرتبه سریع‌تر شده است. (مشارکت‌کننده: James Seo در gh-146192.)

csv

  • تشخیص جداکننده در csv.Sniffer.sniff() اکنون تا ۱.۶ برابر سریع‌تر شده است. (مشارکت‌کننده: Maurycy Pawłowski-Wieroński در gh-137628.)

ارتقاهای اساسی کامپایلر درجا (JIT)

نتایج حاصل از مجموعه بنچمارک pyperformance بهبود عملکرد میانگین هندسی 7-8% را برای کامپایلر درجا (JIT) نسبت به مفسر استاندارد سی‌پایتون (CPython) که با فعال بودن تمامی بهینه‌سازی‌ها روی لینوکس x86-64 ساخته شده است، گزارش می‌دهد. روی مک‌اوس AArch64، کامپایلر درجا (JIT) دارای سرعت اجرای 11-12% سریع‌تر نسبت به مفسر فراخوانی تهی با تمام بهینه‌سازی‌های فعال است. بهبودهای سرعت برای ساخت‌های کامپایلر درجا (JIT) در مقایسه با ساخت‌های بدون آن، از حدود ۱۵ درصد کندی تا بیش از ۱۰۰ درصد سرعت بیشتر (با صرف‌نظر کردن از ریزبنچمارک unpack_sequence) در سیستم‌های لینوکس x86-64 و مک‌اوس AArch64 متغیر است.

ارتقاهای اصلی کامپایلر درجا (JIT) عبارتند از:

  • وابستگی زمان ساخت LLVM 21

  • رابط فرهنگی ردیابی جدید

  • تخصیص ثبات پایه در کامپایلر درجا (JIT)

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

  • پشتیبانی از باز کردن پشته (unwinding) با GDB و backtrace() در گنو (GNU)

  • تولید کد ماشین بهتر

وابستگی زمان ساخت LLVM 21

کامپایلر درجا (JIT) اکنون از LLVM 21 برای تولید استنسیل در زمان ساخت استفاده می‌کند. مثل همیشه، LLVM فقط هنگام ساخت سی‌پایتون (CPython) با کامپایلر درجا (JIT) فعال مورد نیاز است؛ کاربران نهایی که پایتون را اجرا می‌کنند نیازی به نصب LLVM ندارند. دستورالعمل‌های نصب LLVM را می‌توانید در مستندات کامپایلر درجا (JIT) برای تمام پلتفرم‌های پشتیبانی‌شده پیدا کنید. (مشارکت‌کننده: Savannah Ostrowski در gh-140973.)

رابط فرهنگی ردیابی جدید

کامپایلر درجا (JIT) اکنون به طور قابل توجهی از عملیات بایت‌کد و جریان کنترلی بیشتری نسبت به پایتون 3.14 پشتیبانی می‌کند که امکان افزایش سرعت را در طیف وسیع‌تری از کد فراهم می‌کند. برای مثال، ایجاد شیء ساده‌ی پایتون اکنون توسط کامپایلر درجا (JIT) نسخه‌ی 3.15 درک می‌شود. عملیات‌های سربارگذاری‌شده و تولیدگرها نیز به طور جزئی پشتیبانی می‌شوند. این امر با ارتقای اساسی رابط فرهنگی ردیابی کامپایلر درجا (JIT) ممکن شده است که به جای تخمین زدن مسیرهای اجرا مانند پیاده‌سازی قبلی، مسیرهای اجرای واقعی را از طریق کد ثبت می‌کند. (مشارکت‌کننده: Ken Jin در gh-139109. پشتیبانی از ویندوز توسط Mark Shannon در gh-141703 اضافه شد.)

تخصیص ثبات پایه در کامپایلر درجا (JIT)

یک شکل اولیه‌ی از تخصیص ثبات به بهینه‌ساز کامپایلر درجا (JIT) اضافه شده است. این امر به کامپایلر درجا (JIT) اجازه می‌دهد تا از برخی عملیات پشته کاملاً اجتناب کند و در عوض روی ثبات‌ها کار کند. این کار به کامپایلر درجا (JIT) اجازه می‌دهد با اجتناب از خواندن و نوشتن در حافظه، ردوندهای (traces) کارآمدتری تولید کند. (مشارکت‌کننده: Mark Shannon در gh-135379.)

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

اکنون انتشار ثابت بیشتری (constant-propagation) انجام می‌شود. این بدان معناست که وقتی کامپایلر درجا (JIT) تشخیص می‌دهد که کدهای خاص کاربر به مقادیر ثابت منجر می‌شوند، کد می‌تواند توسط کامپایلر درجا (JIT) ساده‌سازی شود. (مشارکت‌کنندگان: Ken Jin و Savannah Ostrowski در gh-132732.)

هر زمان که انجام آن ایمن باشد، از شماره‌ی ارجاع اجتناب می‌شود. این موضوع به طور کلی هزینه‌ی بیشتر عملیات‌ها را در پایتون کاهش می‌دهد. (مشارکت‌کنندگان: Ken Jin, Donghee Na, Zheao Li, Hai Zhu, Savannah Ostrowski, Reiden Ong, Noam Cohen, Tomas Roun, PuQing, Cajetan Rodrigues, و Sacul در gh-134584.)

بهینه‌ساز کامپایلر درجا (JIT) با پیگیری ارجاعات یکتا به شیءها، اکنون می‌تواند به‌روزرسانی‌های شماره‌ی ارجاع را حذف کرده و عملیات درون‌جا (in-place) را روی اعداد صحیح و اعداد اعشاری انجام دهد. (مشارکت‌کنندگان: Reiden Ong و Pieter Eendebak در gh-143414 و gh-146306.)

بهینه‌ساز کامپایلر درجا (JIT) اکنون به طور قابل توجهی از عملیات بیشتری نسبت به نسخه‌ی 3.14 پشتیبانی می‌کند. (مشارکت‌کنندگان: Kumar Aditya, Ken Jin, Jiahao Li, و Sacul در gh-131798.)

پشتیبانی از باز کردن پشته (unwinding) با GDB و backtrace() در گنو (GNU)

کامپایلر درجا (JIT) اکنون اطلاعات بازکردن پشته (unwind) را برای کد ماشین تولیدشده در پلتفرم‌های پشتیبانی‌شده‌ی لینوکس ELF به رابط GDB منتشر می‌کند. هنگامی که ثبت قاب (frame) در libgcc دردسترس باشد، همان اطلاعات بازکردن پشته برای پیمایش‌گرهای پشته‌ی GNU backtrace() نیز ثبت می‌شود. این امر به دیباگرهای بومی، هندلرهای فروپاشی و ابزارهای تشخیصی که از این مکانیسم‌ها استفاده می‌کنند اجازه می‌دهد تا به‌جای متوقف شدن در کد تولیدشده، از طریق قاب‌های کامپایلر درجا (JIT) به عقب برگردند. (مشارکت‌کنندگان: Diego Russo و Pablo Galindo Salgado در gh-146071 و gh-149104.)

تولید کد ماشین بهتر

تولیدگر کد ماشین کامپایلر درجا (JIT) اکنون کد ماشین بهتری برای اهداف x86-64 و AArch64 در سیستم‌عامل‌های مک‌اوس و لینوکس تولید می‌کند. به‌طور کلی، کاربران باید در مقایسه با نسخه‌ی ۳.۱۴، مصرف حافظه‌ی کمتری برای کد ماشین تولیدشده و کد ماشین کارآمدتری را تجربه کنند. (مشارکت‌کننده: Brandt Bucher در gh-136528 و gh-135905. پیاده‌سازی برای AArch64 توسط Mark Shannon در gh-139855. بهینه‌سازی‌های اضافی برای AArch64 توسط Mark Shannon و Diego Russo در gh-140683 و gh-142305.)

قابلیت نگهداری

عملیات بهینه‌ساز کامپایلر درجا (JIT) ساده‌سازی شده‌اند. این کار با بازسازی ساختارهای داده‌ی کامپایلر درجا (JIT) امکان‌پذیر شد. (مشارکت‌کنندگان: Zhongtian Zheng در gh-148211 و Hai Zhu در gh-143421.)

حذف‌شده

ast

  • سازنده‌های AST nodes اکنون هنگامی که یک آرگومان ضروری حذف شود یا یک آرگومان کلیدواژه‌ای که به فیلدی در درخت نحوی انتزاعی (AST) نگاشت نمی‌شود ارسال شود، یک TypeError بالا می‌آورند. این موارد پیش‌تر از نسخه‌ی ۳.۱۳ پایتون یک DeprecationWarning بالا می‌آوردند. (مشارکت‌کنندگان: Brian Schubert و Jelle Zijlstra در gh-137600 و gh-105858.)

collections.abc

  • collections.abc.ByteString از collections.abc.__all__ حذف شده است. collections.abc.ByteString از نسخه‌ی ۳.۱۲ پایتون منسوخ شده و قرار است در نسخه‌ی ۳.۱۷ پایتون حذف شود. (مشارکت‌کننده: Alex Waygood در gh-118803.)

ctypes

  • تابع مستندنشده‌ی ctypes.SetPointerType() که از نسخه‌ی ۳.۱۳ پایتون منسوخ شده بود، حذف شد. (مشارکت‌کننده: Bénédikt Tran در gh-133866.)

datetime

  • strptime() اکنون زمانی که رشته‌ی قالب حاوی %d (روز ماه) بدون دایرکتیو سال باشد، ValueError بالا می‌آورد. این مورد از نسخه‌ی ۳.۱۳ پایتون منسوخ شده بود. (مشارکت‌کنندگان: Stan Ulbrych و Gregory P. Smith در gh-70647.)

glob

  • توابع مستندنشده‌ی glob.glob0() و glob.glob1() که از نسخه‌ی ۳.۱۳ پایتون منسوخ شده بودند، حذف شدند. به‌جای آن از glob.glob() استفاده کنید و یک پوشه را به آرگومان root_dir آن ارسال کنید. (مشارکت‌کننده: Barney Gale در gh-137466.)

http.server

  • کلاس CGIHTTPRequestHandler و پرچم --cgi از رابط خط فرمان python -m http.server حذف شدند. آن‌ها در نسخه‌ی ۳.۱۳ پایتون منسوخ شده بودند. (مشارکت‌کننده: Bénédikt Tran در gh-133810.)

importlib

  • متدهای load_module() از Loader و زیرکلاس‌های آن حذف شدند. سیستم ایمپورت دیگر هنگام تعریف روی زیرکلاس‌های سفارشی، آن را فراخوانی نخواهد کرد. این متد از نسخه‌ی ۳.۴ پایتون به نفع exec_module() منسوخ شده بود. (مشارکت‌کننده: Brett Cannon در gh-97850.)

importlib.resources

pathlib

  • متد منسوخ‌شده‌ی pathlib.PurePath.is_reserved() حذف شد. برای شناسایی مسیرهای رزرو شده در ویندوز، از os.path.isreserved() استفاده کنید. (مشارکت‌کننده: Nikita Sobolev در gh-133875.)

platform

  • تابع platform.java_ver() که از نسخه‌ی ۳.۱۳ پایتون منسوخ شده بود، حذف شد. (مشارکت توسط Alexey Makridenko در gh-133604.)

sre_*

  • ماژول‌های sre_compile، sre_constants و sre_parse حذف شدند. (مشارکت توسط Stan Ulbrych در gh-135994.)

sysconfig

threading

  • پشتیبانی از آرگومان‌های جایگاهی یا کلیدواژه‌ای دلخواه در پیاده‌سازی C اشیاء RLock حذف شد. این قابلیت در نسخه‌ی ۳.۱۴ پایتون منسوخ شده بود. (مشارکت توسط Bénédikt Tran در gh-134087.)

types

  • ویژگی codeobject.co_lnotab از types.CodeType حذف شد. این ویژگی از نسخه‌ی ۳.۱۲ پایتون توسط PEP 626 منسوخ شده بود. (مشارکت توسط Nikita Sobolev در gh-134690.)

typing

  • typing.ByteString از typing.__all__ حذف شده است. typing.ByteString از نسخه‌ی ۳.۹ پایتون منسوخ شده و برنامه‌ریزی شده است که در نسخه‌ی ۳.۱۷ حذف شود. (مشارکت توسط Alex Waygood در gh-118803.)

  • سینتکس آرگومان کلیدواژه‌ای مستندنشده برای ایجاد کلاس‌های NamedTuple (برای مثال، Point = NamedTuple("Point", x=int, y=int)) دیگر پشتیبانی نمی‌شود. به‌جای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید. (مشارکت توسط Bénédikt Tran در gh-133817.)

  • استفاده از TD = TypedDict("TD") یا TD = TypedDict("TD", None) برای ساخت یک نوع TypedDict بدون هیچ فیلدی دیگر پشتیبانی نمی‌شود. به‌جای آن از class TD(TypedDict): pass یا TD = TypedDict("TD", {}) استفاده کنید. (مشارکت توسط Bénédikt Tran در gh-133823.)

  • دکوراتور منسوخ typing.no_type_check_decorator حذف شد. (مشارکت توسط Nikita Sobolev در gh-133601.)

wave

  • متدهای getmark()، setmark() و getmarkers() از کلاس‌های Wave_read و Wave_write که از نسخه‌ی ۳.۱۳ پایتون منسوخ شده بودند، حذف شدند. (مشارکت توسط Bénédikt Tran در gh-133873.)

zipimport

منسوخ‌شده‌ها

موارد منسوخ جدید

  • ast:

    • ایجاد نمونه‌ از گره‌های انتزاعی AST (مانند ast.AST یا ast.expr) منسوخ شده است و در نسخه‌ی ۳.۲۰ پایتون خطایی ایجاد خواهد کرد.

      (مشارکت توسط Brian Schubert در gh-116021.)

  • base64:

    • پذیرش نویسه‌های + و / با الفبای جایگزین در b64decode() و urlsafe_b64decode() اکنون منسوخ شده است. در نسخه‌های آینده‌ی پایتون، این موارد در حالت سخت‌گیرانه (strict mode) به خطا تبدیل می‌شوند و در حالت غیرسخت‌گیرانه نادیده گرفته خواهند شد. (مشارکت توسط Serhiy Storchaka در gh-125346.)

  • رابط خط فرمان (CLI):

    • گزینه‌های خط فرمان -b و -bb منسوخ شده و برنامه‌ریزی شده است که در پایتون 3.17 به عملیات بی‌اثر تبدیل شوند. این گزینه‌ها در اصل کمکی برای انتقال از پایتون ۲ به ۳ بودند. از پایتون 3.17 به بعد، هیچ BytesWarning برای این موارد صادر نخواهد شد؛ به‌جای آن از یک بررسی‌کننده نوع استفاده کنید.

      (مشارکت توسط Nikita Sobolev در gh-136355.)

  • collections.abc:

    • دستورات زیر اکنون باعث می‌شوند که DeprecationWarningها در زمان ران‌تایم صادر شوند:

      • from collections.abc import ByteString

      • import collections.abc; collections.abc.ByteString.

      اگر از collections.abc.ByteString زیرکلاس‌دهی می‌شد یا به‌عنوان آرگومان دوم در isinstance() یا issubclass() استفاده می‌شد، هشدارهای DeprecationWarning از قبل صادر می‌شدند، اما اگر این کلاس صرفاً از ماژول collections.abc وارد (import) یا دسترسی می‌شد، پیش‌تر هشداری صادر نمی‌شد. (مشارکت توسط Alex Waygood در gh-118803.)

  • hashlib:

    • در سازنده‌های توابع هش مانند new() یا سازنده‌های مستقیم با نام هش مانند md5() و sha256()، پارامتر داده‌ی اولیه اختیاری را می‌توانستید در پیاده‌سازی‌های مختلف hashlib به عنوان یک آرگومان کلیدواژه‌ای با نام data= یا string= نیز ارسال کنید.

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

      (مشارکت توسط Bénédikt Tran در gh-134978.)

  • http.cookies:

  • imaplib:

    • تغییر دادن IMAP4.file اکنون منسوخ شده است و برنامه‌ریزی شده تا در پایتون 3.19 حذف شود. این ویژگی اکنون استفاده نمی‌شود و تغییر مقدار آن پرونده‌ی فعلی را به طور صریح نمی‌بندد. (مشارکت توسط Bénédikt Tran در gh-142307.)

  • profile:

    • ماژول profile منسوخ شده است و در پایتون 3.17 حذف خواهد شد. به‌جای آن از profiling.tracing استفاده کنید که یک API سازگار فراهم می‌کند. برای جزئیات بیشتر PEP 799 را ببینید. (مشارکت توسط Pablo Galindo و László Kiss Kollár در gh-138122.)

  • re:

    • توابع re.match() و re.Pattern.match() اکنون به صورت نسبتاً منسوخ درآمده‌اند و APIهای جدید re.prefixmatch() و re.Pattern.prefixmatch() جایگزین آن‌ها شده‌اند که به عنوان نام‌های جایگزین و صریح‌تر اضافه شده‌اند. هدف از این کار، کاهش سردرگمی درباره‌ی معنای match با پیروی از شعار زن پایتون یعنی "Explicit is better than implicit" (صریح بهتر از ضمنی است) است. بیشتر کتابخانه‌های عبارات باقاعده در زبان‌های دیگر از API با نام match برای معنایی استفاده می‌کنند که پایتون همیشه آن را search نامیده است.

      ما برنامه‌ای برای حذف نام قدیمی‌تر match() نداریم، زیرا بیش از ۳۰ سال است که در کدها استفاده می‌شود. کدهایی که از نسخه‌های قدیمی‌تر پایتون پشتیبانی می‌کنند باید همچنان از match() استفاده کنند، در حالی که کدهای جدید باید prefixmatch() را ترجیح دهند. به توابع prefixmatch() در برابر match() مراجعه کنید.

      (مشارکت‌کرده توسط Gregory P. Smith در gh-86519 و Hugo van Kemenade در gh-148100.)

  • struct:

    • فراخوانی Struct.__new__() بدون آرگومان الزامی اکنون منسوخ شده و در پایتون ۳.۲۰ حذف خواهد شد. فراخوانی متد __init__() روی یک شیء Struct مقداردهی اولیه شده، منسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد.

      (مشارکت‌کرده توسط Sergey B Kirpichev و Serhiy Storchaka در gh-143715.)

    • کدهای نوع 'F' و 'D' اکنون به سود فرم‌های دوحرفی 'Zf' و 'Zd' به صورت نسبتاً منسوخ درآمده‌اند. (مشارکت‌کرده توسط Sergey B Kirpichev در gh-121249.)

  • typing:

    • دستورات زیر اکنون باعث می‌شوند که DeprecationWarningها در زمان ران‌تایم صادر شوند:

      • from typing import ByteString

      • import typing; typing.ByteString.

      اگر typing.ByteString زیرکلاس‌ زده می‌شد یا به عنوان آرگومان دوم به isinstance() یا issubclass() ارسال می‌گردید، هشدار‌های DeprecationWarning از پیش صادر می‌شدند، اما پیش‌تر اگر این کلاس صرفاً از ماژول typing وارد (import) یا به آن دسترسی پیدا می‌شد، هشداری صادر نمی‌شد. (توسط Alex Waygood در gh-118803 مشارکت داده شده است.)

    • فراخوانی بررسی‌های isinstance() و issubclass() روی کلاس‌های پروتکلی که صراحتاً با runtime_checkable() دکورور نشده‌اند اما از یک کلاس پروتکل قابل‌بررسی در زمان اجرا ارث‌بری می‌کنند، منسوخ شده است. این کار در پایتون ۳.۲۰ یک TypeError ایجاد خواهد کرد.

      (مشارکت‌کرده توسط Bartosz Sławecki در gh-132604.)

  • webbrowser:

    • کلاس webbrowser.MacOSXOSAScript به نفع webbrowser.MacOS منسوخ شده است و طبق برنامه‌ریزی در پایتون ۳.۱۷ حذف خواهد شد. (مشارکت‌کرده توسط Jeff Lyon در gh-137586.)

  • __version__:

حذف احتمالی در پایتون ۳.۱۶

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

    • تنظیم کردن __loader__ روی یک ماژول در صورتی که __spec__.loader تنظیم نشود، منسوخ شده است. در پایتون ۳.۱۶، __loader__ دیگر توسط سیستم ایمپورت یا کتابخانه‌ی استاندارد تنظیم نشده و در نظر گرفته نخواهد شد.

  • array:

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

  • asyncio:

  • builtins:

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

  • functools:

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

  • logging:

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

  • mimetypes:

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

  • shutil:

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

  • symtable:

    • متد Class.get_methods از نسخه‌ی ۳.۱۴ پایتون منسوخ شده است.

  • sys:

  • sysconfig:

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

  • tarfile:

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

در نوبت حذف در نسخه‌ی ۳.۱۷

  • datetime:

    • فراخوانی‌های strptime() که از یک رشته قالب حاوی %e (روز ماه) بدون سال استفاده می‌کنند. این مورد از نسخه‌ی ۳.۱۵ پایتون منسوخ شده است. (مشارکت‌شده توسط Stan Ulbrych در gh-70647.)

  • collections.abc:

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

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

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

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

  • encodings:

    • ارسال نام‌های encoding غیر اسکی به encodings.normalize_encoding() منسوخ شده است و برای حذف در نسخه‌ی ۳.۱۷ پایتون برنامه‌ریزی شده است. (مشارکت‌شده توسط Stan Ulbrych در gh-136702.)

  • profile:

    • ماژول profile منسوخ شده است و در پایتون 3.17 حذف خواهد شد. به‌جای آن از profiling.tracing استفاده کنید که یک API سازگار فراهم می‌کند. برای جزئیات بیشتر PEP 799 را ببینید. (مشارکت توسط Pablo Galindo و László Kiss Kollár در gh-138122.)

  • webbrowser:

    • کلاس webbrowser.MacOSXOSAScript به نفع webbrowser.MacOS منسوخ شده است. (gh-137586)

  • typing:

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

    • کلاس typing.ByteString که از نسخه‌ی ۳.۹ پایتون منسوخ شده است، برای حذف در نسخه‌ی ۳.۱۷ پایتون برنامه‌ریزی شده است.

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

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

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

  • tkinter:

    • متدهای tkinter.Variable یعنی trace_variable()، trace() (یک نام مستعار برای trace_variable())، trace_vdelete() و trace_vinfo() که از نسخه‌ی ۳.۱۴ پایتون منسوخ شده‌اند، برای حذف در نسخه‌ی ۳.۱۷ پایتون برنامه‌ریزی شده‌اند. به جای آن‌ها از trace_add()، trace_remove() و trace_info() استفاده کنید. (مشارکت‌شده توسط Serhiy Storchaka در gh-120220.)

در انتظار حذف در نسخه‌ی ۳.۱۸ پایتون

  • دیگر مقدار بولی را هنگامی که انتظار توصیف‌گر پرونده می‌رود، نمی‌پذیرد. (مشارکت‌شده توسط Serhiy Storchaka در gh-82626.)

  • decimal:

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

  • مواردهای منسوخ تعریف‌شده توسط PEP 829:

    • سطرهای import در پرونده‌های name.pth به‌صورت بی‌صدا نادیده گرفته می‌شوند.

    (مشارکت‌شده توسط Barry Warsaw در gh-148641.)

در انتظار حذف در نسخه‌ی ۳.۱۹ پایتون

  • ctypes:

    • سوئیچ ضمنی به ساختار struct سازگار با MSVC با تنظیم کردن _pack_ اما نه _layout_ روی سیستم‌عامل‌های غیر ویندوزی.

  • hashlib:

    • در سازنده‌های تابع هش مانند new() یا سازنده‌های مستقیم با نام هش مانند md5() و sha256()، در پیاده‌سازی‌های مختلف hashlib امکان ارسال یک آرگومان کلیدواژه‌ای با نام data= یا string= نیز برای پارامتر داده‌ی اولیه‌ی اختیاری آن‌ها وجود داشت.

      پشتیبانی از نام آرگومان کلیدواژه‌ای string اکنون منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد.

      پیش از پایتون ۳.۱۳، بسته به پیاده‌سازی بک‌اند تابع‌های هش، از پارامتر کلیدواژه‌ای string به‌درستی پشتیبانی نمی‌شد. برای حداکثر سازگاری با نسخه‌های پیشین، ترجیح دهید داده‌ی اولیه را به عنوان یک آرگومان جایگاهی ارسال کنید.

  • http.cookies:

  • imaplib:

    • تغییر دادن IMAP4.file اکنون منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد. این ویژگی اکنون استفاده نمی‌شود و تغییر دادن مقدار آن پرونده‌ی فعلی را به طور خودکار نمی‌بندد.

      پیش از پایتون ۳.۱۴، از این ویژگی برای پیاده‌سازی متدهای متناظر read() و readline() برای IMAP4 استفاده می‌شد، اما از آن زمان به بعد دیگر این‌طور نیست.

در نوبت حذف در پایتون ۳.۲۰

  • فراخوانی متد __new__() از struct.Struct بدون آرگومان format منسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد. فراخوانی متد __init__() روی شیءهای مقداردهی اولیه‌شده‌ی Struct منسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد.

    (مشارکت‌کرده توسط Sergey B Kirpichev و Serhiy Storchaka در gh-143715.)

  • ویژگی‌های __version__، version و VERSION در این ماژول‌های کتابخانه‌ی استاندارد منسوخ شده‌اند و در پایتون ۳.۲۰ حذف خواهند شد. به جای آن از sys.version_info استفاده کنید.

    (مشارکت‌شده توسط Hugo van Kemenade و Stan Ulbrych در gh-76007.)

  • مواردهای منسوخ تعریف‌شده توسط PEP 829:

    • برای سطرهای import پیدا شده در پرونده‌های name.pth هشدارده‌هایی تولید می‌شوند.

    • پرونده‌های name.pth دیگر به طور پیش‌فرض با کدگذاری locale رمزگشایی نمی‌شوند. آن‌ها باید با utf-8-sig کدگذاری شوند.

    (مشارکت‌شده توسط Barry Warsaw در gh-148641.)

  • ast:

    • ایجاد نمونه‌ از گره‌های انتزاعی AST (مانند ast.AST یا ast.expr) منسوخ شده است و در نسخه‌ی ۳.۲۰ پایتون خطایی ایجاد خواهد کرد.

  • typing:

    • فراخوانی بررسی‌های isinstance() و issubclass() روی کلاس‌های پروتکلی که صراحتاً با runtime_checkable() دکورور نشده‌اند اما از یک کلاس پروتکل قابل‌بررسی در زمان اجرا ارث‌بری می‌کنند، منسوخ شده است. این کار در پایتون ۳.۲۰ یک TypeError ایجاد خواهد کرد.

      (مشارکت‌کرده توسط Bartosz Sławecki در gh-132604.)

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

واسط‌های برنامه‌نویسی (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 دنبال شود، یک اخطار نحوی (syntax warning) صادر می‌شود. در نسخه‌های آینده این رفتار به خطای نحوی (syntax error) تبدیل خواهد شد. (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() از نسخه‌ی ۳.۳ پایتون منسوخ شده است، به جای آن از warning() استفاده کنید.

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

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

  • os.path: تابع os.path.commonprefix() منسوخ شده است، برای پیشوندهای مسیر از os.path.commonpath() استفاده کنید. تابع os.path.commonprefix() به دلیل داشتن نام و ماژول گمراه‌کننده در حال منسوخ شدن است. این تابع با وجود اینکه در ماژولی درباره‌ی دستکاری مسیر قرار دارد، برای پیشوندهای مسیر ایمن نیست، به این معنا که استفاده از این تابع می‌تواند به طور تصادفی آسیب‌پذیری‌های پیمایش مسیر را وارد برنامه‌های پایتون کند.

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

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

  • shutil: پارامتر onerror متد rmtree() در نسخه‌ی ۳.۱۲ پایتون منسوخ شده است؛ به‌جای آن از پارامتر 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 استفاده نمی‌شود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده می‌کنند، یک لایه‌ی سازگاری حداقل تا نسخه‌ی ۳.۱۷ پایتون ارائه خواهد شد. (مشارکت توسط 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() نباید نوشتن‌های جزئی انجام دهد.

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

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

منسوخ‌سازی‌های نرم

هیچ برنامه‌ای برای حذف APIهای با منسوخ‌سازی نرم وجود ندارد.

  • توابع re.match() و re.Pattern.match() اکنون به صورت نسبتاً منسوخ درآمده‌اند و APIهای جدید re.prefixmatch() و re.Pattern.prefixmatch() جایگزین آن‌ها شده‌اند که به عنوان نام‌های جایگزین و صریح‌تر اضافه شده‌اند. هدف از این کار، کاهش سردرگمی درباره‌ی معنای match با پیروی از شعار زن پایتون یعنی "Explicit is better than implicit" (صریح بهتر از ضمنی است) است. بیشتر کتابخانه‌های عبارات باقاعده در زبان‌های دیگر از API با نام match برای معنایی استفاده می‌کنند که پایتون همیشه آن را search نامیده است.

    ما برنامه‌ای برای حذف نام قدیمی‌تر match() نداریم، زیرا بیش از ۳۰ سال است که در کدها استفاده می‌شود. کدهایی که از نسخه‌های قدیمی‌تر پایتون پشتیبانی می‌کنند باید همچنان از match() استفاده کنند، در حالی که کدهای جدید باید prefixmatch() را ترجیح دهند. به توابع prefixmatch() در برابر match() مراجعه کنید.

    (مشارکت‌کرده توسط Gregory P. Smith در gh-86519 و Hugo van Kemenade در gh-148100.)

  • استفاده از کدهای نوع فرمت 'F' و 'D' در ماژول struct اکنون به نفع فرم‌های دوحرفی 'Zf' و 'Zd' با منسوخ‌سازی نرم مواجه شده‌اند. (مشارکت‌کننده: Sergey B Kirpichev در gh-121249.)

تغییرات C API

ویژگی‌های جدید

APIهای تغییریافته‌ی C

  • اگر پرچم Py_TPFLAGS_MANAGED_DICT یا Py_TPFLAGS_MANAGED_WEAKREF تنظیم شده باشد، پرچم Py_TPFLAGS_HAVE_GC نیز باید تنظیم شود. (توسط Sergey Miryanov در gh-134786 مشارکت داده شده است.)

  • ماکروی PyDateTime_IMPORT اکنون ایمن در برابر نخ (thread-safe) است. کدهایی که مستقیماً PyDateTimeAPI را از نظر NULL بودن بررسی می‌کنند، باید به‌روزرسانی شوند تا به جای آن PyDateTime_IMPORT را فراخوانی کنند. (مشارکت‌کننده: Kumar Aditya در gh-141563.)

رابط‌های برنامه‌نویسی کاربردی (API) زبان C حذف‌شده

  • تابع‌های منسوخ‌شده‌ی PyUnicode را حذف کنید:

    • PyUnicode_AsDecodedObject(): به‌جای آن از PyCodec_Decode() استفاده کنید.

    • PyUnicode_AsDecodedUnicode(): به‌جای آن از PyCodec_Decode() استفاده کنید؛ توجه داشته باشید که برخی از کُدک‌ها (برای مثال، "base64") ممکن است نوعی غیر از str، مانند bytes را برگردانند.

    • PyUnicode_AsEncodedObject(): به‌جای آن از PyCodec_Encode() استفاده کنید.

    • PyUnicode_AsEncodedUnicode(): به‌جای آن از PyCodec_Encode() استفاده کنید؛ توجه داشته باشید که برخی از کُدک‌ها (برای مثال، "base64") ممکن است نوعی غیر از bytes، مانند str را برگردانند.

    (توسط Stan Ulbrych در gh-133612 مشارکت داده شده است.)

  • PyImport_ImportModuleNoBlock(): نام مستعار منسوخ‌شده‌ی PyImport_ImportModule(). (توسط Bénédikt Tran در gh-133644 مشارکت داده شده است.)

  • PyWeakref_GetObject() و PyWeakref_GET_OBJECT: به‌جای آن از PyWeakref_GetRef() استفاده کنید. از pythoncapi-compat project می‌توان برای دریافت PyWeakref_GetRef() در پایتون ۳.۱۲ و نسخه‌های قدیمی‌تر استفاده کرد. (توسط Bénédikt Tran در gh-133644 مشارکت داده شده است.)

  • تابع منسوخ‌شده‌ی PySys_ResetWarnOptions() حذف شد. به‌جای آن sys.warnoptions و warnings.filters را پاکسازی کنید.

    (توسط Nikita Sobolev در gh-138886 مشارکت داده شده است.)

تابع‌های زیر به نفع PyConfig_Get() حذف شده‌اند. از pythoncapi-compat project می‌توان برای دریافت PyConfig_Get() در پایتون ۳.۱۳ و نسخه‌های قدیمی‌تر استفاده کرد.

رابط‌های برنامه‌نویسی کاربردی C منسوخ‌شده

  • پشتیبانی از PEP 456 برای ارائه‌ی تعریفی خارجی از طرح‌واره‌ی هش‌کردن رشته منسوخ شد. حذف آن برای پایتون ۳.۱۹ برنامه‌ریزی شده است.

    پیش‌تر، برنامه‌های تعبیه‌کننده می‌توانستند Py_HASH_ALGORITHM را طوری تعریف کنند که برابر با Py_HASH_EXTERNAL باشد تا نشان دهند طرح‌واره‌ی هش‌کردن به صورت خارجی فراهم شده است، اما این ویژگی مستندنشده، آزمایش‌نشده و احتمالاً بدون استفاده بود.

    (مشارکت‌کننده: Bénédikt Tran در gh-141226.)

  • برای قالب‌های عدد صحیح بدون علامت در PyArg_ParseTuple()، پذیرش اعداد صحیح پایتون با مقداری که از بیشینه مقدار برای نوع C بزرگ‌تر است یا از کمینه مقدار برای نوع عدد صحیح علامت‌دار متناظر با همان اندازه کمتر است، اکنون منسوخ شده است. (مشارکت‌کننده: Serhiy Storchaka در gh-132629.)

  • PyBytes_FromStringAndSize(NULL, len) و _PyBytes_Resize() منسوخ‌نشانه هستند، به‌جای آن‌ها از API مربوط به PyBytesWriter استفاده کنید. (مشارکت‌کننده: Victor Stinner در gh-129813.)

  • _PyObject_CallMethodId()، _PyObject_GetAttrId() و _PyUnicode_FromId() از پایتون ۳.۱۵ منسوخ شده‌اند و در پایتون ۳.۲۰ حذف خواهند شد. به‌جای آن، از PyUnicode_InternFromString() استفاده کنید و نتیجه را در وضعیت ماژول نهانگاه کنید، سپس PyObject_CallMethod() یا PyObject_GetAttr() را فراخوانی کنید. (مشارکت‌کننده: Victor Stinner در gh-141049.)

  • فیلد cval از نوع PyComplexObject منسوخ شد. برای تبدیل یک عدد مختلط پایتون به/از نمایش C مربوط به Py_complex، از PyComplex_AsCComplex() و PyComplex_FromCComplex() استفاده کنید. (مشارکت‌کننده: Sergey B Kirpichev در gh-128813.)

  • توابع _Py_c_sum()، _Py_c_diff()، _Py_c_neg()، _Py_c_prod()، _Py_c_quot()، _Py_c_pow() و _Py_c_abs() منسوخ‌نشانه هستند. (مشارکت‌کننده: Sergey B Kirpichev در gh-128813.)

  • bytes_warning از پایتون ۳.۱۵ منسوخ شده است و در پایتون ۳.۱۷ حذف خواهد شد. (مشارکت‌کننده: Nikita Sobolev در gh-136355.)

  • ماکروی Py_INFINITY منسوخ‌نشانه است، به‌جای آن از ماکروی INFINITY استاندارد C11 یعنی <math.h> استفاده کنید. (مشارکت‌کننده: Sergey B Kirpichev در gh-141004.)

  • ماکروهای زیر منسوخ‌نشانه هستند:

    کلان‌دستور Py_UNICODE_WIDE که قرار بود حذف شود، اکنون به‌جای آن منسوخ ملایم شده است.

    (تهیه‌شده توسط Petr Viktorin در gh-146175.)

  • موارد Py_MATH_El و Py_MATH_PIl از نسخه‌ی ۳.۱۵ پایتون منسوخ شده‌اند و در نسخه‌ی ۳.۲۰ پایتون حذف خواهند شد. (تهیه‌شده توسط Sergey B Kirpichev در gh-141004.)

تغییرات ساخت

  • پشتیبان ضمنی به نسخه‌ی بسته‌بندی‌شده‌ی کتابخانه‌ی libmpdec حذف شد. اکنون این مورد باید با تنظیم --with-system-libmpdec روی no یا با استفاده از --without-system-libmpdec به‌طور صریح فعال شود. (تهیه‌شده توسط Sergey B Kirpichev در gh-115119.)

  • گزینه‌ی پیکربندی جدید --with-missing-stdlib-config=FILE به توزیع‌کنندگان اجازه می‌دهد تا یک پرونده‌ی پیکربندی JSON حاوی پیام‌های خطای سفارشی برای ماژول‌های کتابخانه‌ی استاندارد که گم شده‌اند یا به‌صورت جداگانه بسته‌بندی شده‌اند، ارسال کنند. (تهیه‌شده توسط Stan Ulbrych و Petr Viktorin در gh-139707.)

  • گزینه‌ی پیکربندی جدید --with-pymalloc-hugepages پشتیبانی از صفحات بزرگ را برای ناحیه‌های pymalloc فعال می‌کند. در صورت فعال‌سازی، اندازه‌ی ناحیه به ۲ مگابایت افزایش می‌یابد و تخصیص حافظه با استفاده از MAP_HUGETLB (لینوکس) یا MEM_LARGE_PAGES (ویندوز) به همراه جایگزین خودکار به صفحات معمولی انجام می‌شود. در ویندوز، از build.bat --pymalloc-hugepages استفاده کنید. در حین اجرا (ران‌تایم)، صفحات بزرگ باید با تنظیم متغیر محیطی PYTHON_PYMALLOC_HUGEPAGES روی 1 به‌طور صریح فعال شوند. (تهیه‌شده توسط Pablo Galindo Salgado در gh-144319.)

  • حاشیه‌نویسی استفاده از mmap ناشناس اکنون در صورتی پشتیبانی می‌شود که هسته‌ی لینوکس از PR_SET_VMA_ANON_NAME (لینوکس ۵.۱۷ یا جدیدتر) پشتیبانی کند. حاشیه‌نویسی‌ها در /proc/<pid>/maps قابل مشاهده هستند، مشروط بر اینکه هسته از این ویژگی پشتیبانی کند و -X dev به پایتون ارسال شود یا پایتون در حالت اشکال‌زدایی ساخته شده باشد. (تهیه‌شده توسط Donghee Na در gh-141770.)

  • سی‌پایتون اکنون به‌طور پیش‌فرض با اشاره‌گرهای قاب فعال ساخته می‌شود (PEP 831). برای انصراف، --without-frame-pointers را ارسال کنید.

    سازندگان افزونه‌های C و کتابخانه‌های بومی که با سیستم‌های ساخت سفارشی ساخته شده‌اند، باید مطمئن شوند که زنجیره‌ی بازگشایی سالم است. این کار معمولاً با افزودن -fno-omit-frame-pointer و پرچم‌های مشابه به CFLAGS انجام می‌شود. برای اطلاع از پرچم‌های خاصی که پایتون استفاده می‌کند، به مستندات --without-frame-pointers مراجعه کنید.

    (تهیه‌شده توسط Pablo Galindo Salgado و Savannah Ostrowski در gh-149201.)

  • ساخت‌های ۶۴ بیتی با استفاده از ویژوال استودیوی ۲۰۲۶ (MSVC 18) اکنون می‌توانند از مفسر فراخوانی انتها جدید استفاده کنند. نتایج روی ویژوال استودیو ۱۸.۱.۱ سرعتی بین 15-20% روی میانگین هندسی pyperformance در ویندوز x86-64 نسبت به مفسر switch-case روی پردازنده‌ی AMD Ryzen 7 5800X را گزارش می‌دهند. ما افزایش سرعت بین ۱۴٪ برای کتابخانه‌های بزرگ پایتون خالص تا ۴۰٪ برای اسکریپت‌های کوچک پایتون خالصِ طولانی‌مدت را در ویندوز مشاهده کرده‌ایم. این امر با ویژگی جدیدی که در MSVC 18 معرفی شده امکان‌پذیر شده است که باینری‌های رسمی ۶۴ بیتی ویندوز در python.org اکنون از آن استفاده می‌کنند. (تهیه‌شده توسط Chris Eibl، Ken Jin و Brandt Bucher در gh-143068. تشکر ویژه از Steve Dower و تیم MSVC از جمله Hulon Jenkins.)

انتقال به پایتون ۳.۱۵

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

  • رابط‌های برنامه‌نویسی sqlite3.Connection پاک‌سازی شده‌اند.

    (تهیه‌شده توسط Serhiy Storchaka در gh-133595.)

  • resource.RLIM_INFINITY اکنون همیشه مثبت است. ارسال یک مقدار عدد صحیح منفی که با مقدار قبلی آن مطابقت داشت (مانند -1 یا -3، بسته به پلتفرم) به resource.setrlimit() و resource.prlimit() اکنون منسوخ شده است. (تهیه‌شده توسط Serhiy Storchaka در gh-137044.)

  • متد mmap.mmap.resize() در پلتفرم‌هایی که از سیستم‌کل زیرساختی پشتیبانی نمی‌کنند، به‌جای بالا آوردن یک SystemError حذف شده است. (مشارکت‌شده توسط An Long در gh-138205.)

  • اگر یک پیمایش‌گر xml.etree.ElementTree.iterparse() نبسته، پرونده‌ای را باز کرده باشد، اکنون یک هشدار منبع (resource warning) صادر می‌شود. برای بستن آن، از متد close() یا مدیر زمینه‌ی contextlib.closing() استفاده کنید. (مشارکت‌شده توسط اسامه عبدالقادر و سرهی استورچاکا در gh-140601.)

  • اگر یک گزینه‌ی کوتاه و یک گزینه‌ی بلند با خط تیره‌ی تکی به argparse.ArgumentParser.add_argument() فرستاده شوند، مقدار dest اکنون از گزینه‌ی بلند با خط تیره‌ی تکی استنباط می‌شود. برای نمونه، در add_argument('-f', '-foo')، مقدار dest به‌جای 'f' اکنون 'foo' است. برای حفظ رفتار قبلی، یک آرگومان dest صریح ارسال کنید. (مشارکت‌کننده: Serhiy Storchaka در gh-138697.)

  • پُرکننده (padding) ورودی دیگر در base64.urlsafe_b64decode() الزامی نیست. برای الزامی کردن پُرکننده، یک آرگومان جدید padded=True ارسال کنید یا از base64.b64decode() با آرگومان altchars=b'-_' استفاده کنید (این روش با نسخه‌های قدیمی‌تر پایتون کار می‌کند). (مشارکت‌شده توسط Serhiy Storchaka در gh-73613.)

  • از آنجا که unittest.TestCase.assertWarns() و unittest.TestCase.assertWarnsRegex() دیگر اخطارهایی را که با دسته‌بندی یا عبارت منظم مشخص‌شده مطابقت ندارند نادیده نمی‌گیرند، ممکن است آزمون‌های شما شروع به نشت دادن برخی اخطارها کنند که پیش‌تر پنهان شده بودند. برای بی‌صدا کردن آن‌ها از صافی‌های اخطار (warning filters) یا از متدهای اضافی assertWarns*() برای گرفتن و بررسی آن‌ها استفاده کنید. (مشارکت‌شده توسط Serhiy Storchaka در gh-143231.)