نسخه ۳.۱۵ چه چیزهای جدیدی دارد¶
- ویرایشگر:
Hugo van Kemenade
این مقاله ویژگیهای جدید پایتون ۳.۱۵ را در مقایسه با ۳.۱۴ توضیح میدهد. پایتون ۳.۱۵ در ۹ اکتبر ۲۰۲۶ منتشر شد. برای جزئیات کامل، سیاهه تغییرات را ببینید.
همچنین ببینید
PEP 790 -- برنامهی انتشار پایتون ۳.۱۵
خلاصه -- نکات برجستهی انتشار¶
پایتون ۳.۱۵ آخرین نسخهی پایدار زبان برنامهنویسی پایتون است که شامل ترکیبی از تغییرات در زبان، پیادهسازی و کتابخانهی استاندارد است. بزرگترین تغییرات شامل واردسازی تنبل، فرهنگ لغتهای فریز شده و توابع توکار نگهبان، استفاده از UTF-8 به عنوان کدگذاری پیشفرض، باز کردن بستهبندی در درک مجموعهها، و یک ایبیآی پایدار برای بیلدهای بدون قفل سراسری مفسر (free-threaded) میشود.
تغییرات کتابخانه شامل یک بستهی پروفایلگیری جدید با Tachyon (یک پروفایلگیر نمونهبرداری آماری با فرکانس بالا)، رنگهای بیشتر در خروجی خط فرمان، و همچنین منسوخسازیها و حذفهای معمول، و بهبودهایی در کاربرپسندی و درستی است.
این مقاله تلاشی برای ارائهی مشخصات کامل از همهی ویژگیهای جدید نمیکند، بلکه نمای کلی مناسبی را ارائه میدهد. برای جزئیات کامل به مستندات، مانند مرجع کتابخانه و مرجع زبان مراجعه کنید. برای درک پیادهسازی کامل و مبانی طراحی یک تغییر، به PEP مربوط به آن ویژگی خاص مراجعه کنید؛ اما توجه داشته باشید که معمولاً پس از پیادهسازی کامل یک ویژگی، PEPها بهروز نگه داشته نمیشوند.
برای راهنمایی در مورد ارتقا از نسخههای قبلی پایتون، به Porting to Python 3.15 مراجعه کنید.
بهبودهای مفسر:
بهبودهای چشمگیر در کتابخانهی استاندارد:
PEP 799: یک بستهی تحلیل عملکرد اختصاصی برای سازماندهی ابزارهای تحلیل عملکرد پایتون
PEP 799: تاکیون (Tachyon): تحلیلگر نمونهبرداری آماری با فرکانس بالا
ویژگیهای جدید تایپینگ:
بهبودهای API زبان C:
PEP 782: یک API جدید PyBytesWriter برای ایجاد یک شیء بایت پایتون
PEP 803, 820, 793: نسخه پایدار ABI برای نسخههای بدون نخ و API مرتبط زبان C
تغییرات ساخت:
تغییرات نسخهی جدید:
نسخههای رسمی ۶۴ بیتی ویندوز اکنون از مفسر فراخوانی تهی استفاده میکنند
باینریهای رسمی macOS اکنون به طور پیشفرض پشتیبانی از اجرای آزاد (free-threading) را نصب میکنند
ویژگیهای جدید¶
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() را یک بار در انتهای دسته فراخوانی نمایند.
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()بهینهسازی شوند در ادامه فهرست شدهاند.بازطراحیهای بهینهسازی پیشنهادی¶ شرح
قدیمی
جدید
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¶
پارامتر pad به
z85encode()اضافه شد. (مشارکتکننده: Hauke Dämpfling در gh-143103.)پارامتر padded به
b32encode()،b32decode()،b32hexencode()،b32hexdecode()،b64encode()،b64decode()،urlsafe_b64encode()وurlsafe_b64decode()اضافه شد. (مشارکتکننده: Serhiy Storchaka در gh-73613.)پارامتر wrapcol به
b16encode()،b32encode()،b32hexencode()،b64encode()،b85encode()وz85encode()اضافه شد. (مشارکتکننده: Serhiy Storchaka در gh-143214 و gh-146431.)پارامتر ignorechars به
b16decode()،b32decode()،b32hexdecode()،b64decode()،b85decode()وz85decode()اضافه شد. (مشارکتکننده: Serhiy Storchaka در gh-144001 و gh-146431.)پارامتر canonical به
b32decode()،b32hexdecode()،b64decode()،a85decode()،b85decode()وz85decode()اضافه شد تا کدهای با بیتهای پُرکنندهی غیرصفر یا سایر فرمهای غیرکانونیکال را رد کند. (مشارکتکننده: Gregory P. Smith در gh-146311.)
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)¶
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¶
مقدار
_type_برایc_float_complex،c_double_complexوc_longdouble_complexرا برای سازگاری با NumPy ازF،DوGبهZf،ZdوZgتغییر دهید. (مشارکتکرده توسط ویکتور استینر (Victor Stinner) در gh-148675.)
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¶
پارامتر max_threads به
faulthandler.enable()،faulthandler.dump_traceback()،faulthandler.dump_traceback_later()وfaulthandler.register()اضافه شد. (مشارکت توسط اریک فروملینگ (Eric Froemling) در gh-149085.)
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¶
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¶
اضافه شدن توابع
math.isnormal()وmath.issubnormal(). (مشارکت توسط Sergey B Kirpichev در gh-132908.)اضافه شدن توابع
math.fmax()،math.fmin()وmath.signbit(). (مشارکت توسط Bénédikt Tran در gh-135853.)
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¶
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¶
افزودن ثابتهای جدید:
RLIMIT_NTHR،RLIMIT_UMTXP،RLIMIT_THREADS،RLIM_SAVED_CURوRLIM_SAVED_MAX. (مشارکت توسط Serhiy Storchaka در gh-137512.)
shelve¶
socket¶
افزودن ثابتها برای پروتکل ISO-TP CAN. (مشارکت توسط Patrick Menschel و Stefan Tatschner در gh-86819.)
sqlite3¶
رابط خط فرمان command-line interface چندین ویژگی جدید دارد:
تکمیل کلیدواژهی SQL روی کلید Tab. (مشارکت توسط Long Tan در gh-133393.)
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¶
متدهای
symtable.Function.get_cells()وsymtable.Symbol.is_cell()اضافه شدند. (مشارکت توسط Yashp002 در gh-143504.)
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¶
برای پشتیبانی از دسترسی همزمان به تولیدگرها و پیمایشگرها، کلاس
serialize_iteratorو متدهایsynchronized_iterator()وconcurrent_tee()اضافه شدند. (مشارکت از Raymond Hettinger در gh-124397.)
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¶
خروجی رابط خط فرمان ماژول
tokenizeبهصورت پیشفرض رنگی است. این ویژگی را میتوانید از طریق متغیرهای محیطی کنترل کنید. (مشارکت توسط Hugo van Kemenade در gh-148991.)
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¶
پایگاه دادهی یونیکد به یونیکد ۱۷.۰.۰ بهروزرسانی شده است. (مشارکت توسط Benjamin Peterson در gh-138706.)
افزودن توابع
unicodedata.isxidstart()وunicodedata.isxidcontinue()برای بررسی اینکه آیا یک نویسه میتواند آغازگر یا ادامهدهندهی یک شناسهی Unicode Standard Annex #31 باشد. (مشارکت توسط Stan Ulbrych در gh-129117.)افزودن تابع
iter_graphemes()برای پیمایش کردن خوشههای نگارشی بر اساس قوانین تعریفشده در Unicode Standard Annex #29, "Unicode Text Segmentation". افزودن توابعgrapheme_cluster_break()،indic_conjunct_break()وextended_pictographic()برای دریافت ویژگیهای نویسه که با الگوریتم بالا مرتبط هستند. (مشارکت توسط Serhiy Storchaka و Guillaume Sanchez در gh-74902.)افزودن تابع
block()برای برگرداندن Unicode block تخصیصیافته به یک نویسه. (مشارکت توسط Stan Ulbrych در gh-66802.)
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¶
متدهای
SetAllocTrackerActivationThreshold()وSetAllocTrackerMaximumAmplification()به اشیاء xmlparser اضافه شدند تا محافظت در برابر مقادیر نامتناسب استفاده از حافظهی پویا را از درون یک پارسر Expat تنظیم کنند. (مشارکتکرده توسط Bénédikt Tran در gh-90949.)متدهای
SetBillionLaughsAttackProtectionActivationThreshold()وSetBillionLaughsAttackProtectionMaximumAmplification()به اشیاء xmlparser اضافه شدند تا محافظت در برابر حملات billion laughs را تنظیم کنند. (مشارکتکرده توسط Bénédikt Tran در gh-90949.)
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¶
پارامتر منسوخشدهی
packageاز تابعimportlib.resources.files()حذف شد. (مشارکتکننده: Semyon Moroz در gh-138044.)
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¶
پارامتر check_home از
sysconfig.is_python_build()حذف شد. (مشارکت توسط Filipe Laíns در gh-92897.)
threading¶
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¶
متد منسوخ
zipimport.zipimporter.load_module()را حذف کنید. بهجای آن ازzipimport.zipimporter.exec_module()استفاده کنید. (مشارکت توسط Jiahao Li در gh-133656.)
منسوخشدهها¶
موارد منسوخ جدید¶
ast:-
پذیرش نویسههای
+و/با الفبای جایگزین درb64decode()وurlsafe_b64decode()اکنون منسوخ شده است. در نسخههای آیندهی پایتون، این موارد در حالت سختگیرانه (strict mode) به خطا تبدیل میشوند و در حالت غیرسختگیرانه نادیده گرفته خواهند شد. (مشارکت توسط Serhiy Storchaka در gh-125346.)
رابط خط فرمان (CLI):
گزینههای خط فرمان
-bو-bbمنسوخ شده و برنامهریزی شده است که در پایتون 3.17 به عملیات بیاثر تبدیل شوند. این گزینهها در اصل کمکی برای انتقال از پایتون ۲ به ۳ بودند. از پایتون 3.17 به بعد، هیچBytesWarningبرای این موارد صادر نخواهد شد؛ بهجای آن از یک بررسیکننده نوع استفاده کنید.(مشارکت توسط Nikita Sobolev در gh-136355.)
-
دستورات زیر اکنون باعث میشوند که
DeprecationWarningها در زمان رانتایم صادر شوند:from collections.abc import ByteStringimport collections.abc; collections.abc.ByteString.
اگر از
collections.abc.ByteStringزیرکلاسدهی میشد یا بهعنوان آرگومان دوم درisinstance()یاissubclass()استفاده میشد، هشدارهایDeprecationWarningاز قبل صادر میشدند، اما اگر این کلاس صرفاً از ماژولcollections.abcوارد (import) یا دسترسی میشد، پیشتر هشداری صادر نمیشد. (مشارکت توسط Alex Waygood در gh-118803.)
-
در سازندههای توابع هش مانند
new()یا سازندههای مستقیم با نام هش مانندmd5()وsha256()، پارامتر دادهی اولیه اختیاری را میتوانستید در پیادهسازیهای مختلفhashlibبه عنوان یک آرگومان کلیدواژهای با نامdata=یاstring=نیز ارسال کنید.پشتیبانی از نام آرگومان کلیدواژهای
stringاکنون منسوخ شده است و برنامهریزی شده تا در پایتون 3.19 حذف شود. برای حداکثر سازگاری با نسخههای قبل، ترجیح دهید دادهی اولیه را بهعنوان یک آرگومان جایگاهی ارسال کنید.(مشارکت توسط Bénédikt Tran در gh-134978.)
-
متدهای
Morsel.js_outputوBaseCookie.js_outputمنسوخ شدهاند و در پایتون 3.19 حذف خواهند شد. بهجای آنها ازMorsel.outputیاBaseCookie.outputاستفاده کنید. (مشارکت توسط kishorhange111 در gh-148849.)
-
تغییر دادن
IMAP4.fileاکنون منسوخ شده است و برنامهریزی شده تا در پایتون 3.19 حذف شود. این ویژگی اکنون استفاده نمیشود و تغییر مقدار آن پروندهی فعلی را به طور صریح نمیبندد. (مشارکت توسط Bénédikt Tran در gh-142307.)
-
ماژول
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.__new__()بدون آرگومان الزامی اکنون منسوخ شده و در پایتون ۳.۲۰ حذف خواهد شد. فراخوانی متد__init__()روی یک شیءStructمقداردهی اولیه شده، منسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد.(مشارکتکرده توسط Sergey B Kirpichev و Serhiy Storchaka در gh-143715.)
کدهای نوع
'F'و'D'اکنون به سود فرمهای دوحرفی'Zf'و'Zd'به صورت نسبتاً منسوخ درآمدهاند. (مشارکتکرده توسط Sergey B Kirpichev در gh-121249.)
-
دستورات زیر اکنون باعث میشوند که
DeprecationWarningها در زمان رانتایم صادر شوند:from typing import ByteStringimport 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.MacOSXOSAScriptبه نفعwebbrowser.MacOSمنسوخ شده است و طبق برنامهریزی در پایتون ۳.۱۷ حذف خواهد شد. (مشارکتکرده توسط Jeff Lyon در gh-137586.)
__version__:ویژگیهای
__version__،versionوVERSIONدر این ماژولهای کتابخانهی استاندارد منسوخ شدهاند و در پایتون ۳.۲۰ حذف خواهند شد. به جای آن ازsys.version_infoاستفاده کنید.ctypes.macholibdecimal(بهجای آن ازdecimal.SPEC_VERSIONاستفاده کنید)logging(__date__نیز منسوخ شده است)xml.sax.expatreader
(مشارکتشده توسط Hugo van Kemenade و Stan Ulbrych در gh-76007.)
حذف احتمالی در پایتون ۳.۱۶¶
سیستم ایمپورت:
تنظیم کردن
__loader__روی یک ماژول در صورتی که__spec__.loaderتنظیم نشود، منسوخ شده است. در پایتون ۳.۱۶،__loader__دیگر توسط سیستم ایمپورت یا کتابخانهی استاندارد تنظیم نشده و در نظر گرفته نخواهد شد.
-
کد قالب
'u'(wchar_t) از نسخهی ۳.۳ پایتون در مستندات و از نسخهی ۳.۱۳ در رانتایم منسوخ شده است. بهجای آن از کد قالب'w'(Py_UCS4) برای نویسههای یونیکد استفاده کنید.
-
تابعی
asyncio.iscoroutinefunction()منسوخ شده است و در پایتون ۳.۱۶ حذف خواهد شد؛ بهجای آن ازinspect.iscoroutinefunction()استفاده کنید. (مشارکتشده توسط Jiahao Li و Kumar Aditya در gh-122875.)سیستم سیاست
asyncioمنسوخ شده است و در پایتون ۳.۱۶ حذف خواهد شد. بهویژه، کلاسها و توابع زیر منسوخ شدهاند:کاربران باید برای استفاده از پیادهسازی حلقهی رویداد دلخواه، از
asyncio.run()یاasyncio.Runnerبه همراه loop_factory استفاده کنند.برای نمونه، برای استفاده از
asyncio.SelectorEventLoopروی ویندوز:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(مشارکتشده توسط Kumar Aditya در gh-127949.)
-
وارونسازی بیتی روی انواع دادهی بولی، یعنی
~Trueیا~Falseاز نسخهی ۳.۱۲ پایتون منسوخ شده است، زیرا نتایج تعجبآور و غیرشهودی تولید میکند (-2و-1). بهجای آن برای نفی منطقی یک مقدار بولی ازnot xاستفاده کنید. در موارد نادر که به وارونسازی بیتی عدد صحیح زیرین نیاز دارید، بهطور صریح بهintتبدیل کنید (~int(x)).
-
فراخوانی پیادهسازی پایتونی
functools.reduce()با آرگومانهای کلیدواژهای function یا sequence از نسخهی ۳.۱۴ پایتون منسوخ شده است.
-
پشتیبانی از هندلرهای گزارشگیری سفارشی با آرگومان strm منسوخ شده است و طبق برنامه در نسخهی ۳.۱۶ پایتون حذف خواهد شد. بهجای آن، هندلرها را با آرگومان stream تعریف کنید. (مشارکت توسط Mariusz Felisiak در gh-115032.)
-
پسوندهای معتبر با یک '.' شروع میشوند یا برای
mimetypes.MimeTypes.add_type()خالی هستند. پسوندهای بدون نقطه منسوخ شدهاند و در نسخهی ۳.۱۶ پایتون یکValueErrorایجاد خواهند کرد. (مشارکت توسط Hugo van Kemenade در gh-75223.)
-
استثنای
ExecErrorاز نسخهی ۳.۱۴ پایتون منسوخ شده است. این استثنا از نسخهی ۳.۴ پایتون توسط هیچ تابعی درshutilاستفاده نشده است و اکنون یک نام مستعار برایRuntimeErrorاست.
-
متد
Class.get_methodsاز نسخهی ۳.۱۴ پایتون منسوخ شده است.
sys:تابع
_enablelegacywindowsfsencoding()از نسخهی ۳.۱۳ پایتون منسوخ شده است. بهجای آن از متغیر محیطیPYTHONLEGACYWINDOWSFSENCODINGاستفاده کنید.
-
تابع
sysconfig.expand_makefile_vars()از نسخهی ۳.۱۴ پایتون منسوخ شده است. بهجای آن از آرگومانvarsمربوط بهsysconfig.get_paths()استفاده کنید.
-
ویژگی مستندنشده و استفادهنشدهی
TarFile.tarfileاز نسخهی ۳.۱۳ پایتون منسوخ شده است.
در نوبت حذف در نسخهی ۳.۱۷¶
-
فراخوانیهای
strptime()که از یک رشته قالب حاوی%e(روز ماه) بدون سال استفاده میکنند. این مورد از نسخهی ۳.۱۵ پایتون منسوخ شده است. (مشارکتشده توسط Stan Ulbrych در gh-70647.)
-
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.)
-
ارسال نامهای encoding غیر اسکی به
encodings.normalize_encoding()منسوخ شده است و برای حذف در نسخهی ۳.۱۷ پایتون برنامهریزی شده است. (مشارکتشده توسط Stan Ulbrych در gh-136702.)
-
ماژول
profileمنسوخ شده است و در پایتون 3.17 حذف خواهد شد. بهجای آن ازprofiling.tracingاستفاده کنید که یک API سازگار فراهم میکند. برای جزئیات بیشتر PEP 799 را ببینید. (مشارکت توسط Pablo Galindo و László Kiss Kollár در gh-138122.)
-
کلاس
webbrowser.MacOSXOSAScriptبه نفعwebbrowser.MacOSمنسوخ شده است. (gh-137586)
-
قبل از نسخهی ۳.۱۴ پایتون، 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.Variableیعنیtrace_variable()،trace()(یک نام مستعار برایtrace_variable())،trace_vdelete()وtrace_vinfo()که از نسخهی ۳.۱۴ پایتون منسوخ شدهاند، برای حذف در نسخهی ۳.۱۷ پایتون برنامهریزی شدهاند. به جای آنها ازtrace_add()،trace_remove()وtrace_info()استفاده کنید. (مشارکتشده توسط Serhiy Storchaka در gh-120220.)
در انتظار حذف در نسخهی ۳.۱۸ پایتون¶
در انتظار حذف در نسخهی ۳.۱۹ پایتون¶
-
در سازندههای تابع هش مانند
new()یا سازندههای مستقیم با نام هش مانندmd5()وsha256()، در پیادهسازیهای مختلفhashlibامکان ارسال یک آرگومان کلیدواژهای با نامdata=یاstring=نیز برای پارامتر دادهی اولیهی اختیاری آنها وجود داشت.پشتیبانی از نام آرگومان کلیدواژهای
stringاکنون منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد.پیش از پایتون ۳.۱۳، بسته به پیادهسازی بکاند تابعهای هش، از پارامتر کلیدواژهای
stringبهدرستی پشتیبانی نمیشد. برای حداکثر سازگاری با نسخههای پیشین، ترجیح دهید دادهی اولیه را به عنوان یک آرگومان جایگاهی ارسال کنید.
-
http.cookies.Morsel.js_output()منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد.http.cookies.BaseCookie.js_output()منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد.
-
تغییر دادن
IMAP4.fileاکنون منسوخ شده است و در پایتون ۳.۱۹ حذف خواهد شد. این ویژگی اکنون استفاده نمیشود و تغییر دادن مقدار آن پروندهی فعلی را به طور خودکار نمیبندد.پیش از پایتون ۳.۱۴، از این ویژگی برای پیادهسازی متدهای متناظر
read()وreadline()برایIMAP4استفاده میشد، اما از آن زمان به بعد دیگر اینطور نیست.
در نوبت حذف در پایتون ۳.۲۰¶
فراخوانی متد
__new__()ازstruct.Structبدون آرگومان format منسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد. فراخوانی متد__init__()روی شیءهای مقداردهی اولیهشدهیStructمنسوخ شده است و در پایتون ۳.۲۰ حذف خواهد شد.(مشارکتکرده توسط Sergey B Kirpichev و Serhiy Storchaka در gh-143715.)
ویژگیهای
__version__،versionوVERSIONدر این ماژولهای کتابخانهی استاندارد منسوخ شدهاند و در پایتون ۳.۲۰ حذف خواهند شد. به جای آن ازsys.version_infoاستفاده کنید.ctypes.macholibdecimal(بهجای آن ازdecimal.SPEC_VERSIONاستفاده کنید)logging(__date__نیز منسوخ شده است)xml.sax.expatreader
(مشارکتشده توسط 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) منسوخ شده است و در نسخهی ۳.۲۰ پایتون خطایی ایجاد خواهد کرد.
-
فراخوانی بررسیهای
isinstance()وissubclass()روی کلاسهای پروتکلی که صراحتاً باruntime_checkable()دکورور نشدهاند اما از یک کلاس پروتکل قابلبررسی در زمان اجرا ارثبری میکنند، منسوخ شده است. این کار در پایتون ۳.۲۰ یکTypeErrorایجاد خواهد کرد.(مشارکتکرده توسط Bartosz Sławecki در gh-132604.)
در نوبت حذف در نسخههای آینده¶
واسطهای برنامهنویسی (API) زیر در آینده حذف خواهند شد، البته در حال حاضر هیچ تاریخ مشخصی برای حذف آنها تعیین نشده است.
-
تودرتو قرار دادن گروههای آرگومان و تودرتو قرار دادن گروههای متقابلاً انحصاری منسوخ شده است.
ارسال آرگومان کلیدواژهای مستندنشدهی prefix_chars به
add_argument_group()اکنون منسوخ شده است.مبدل نوع
argparse.FileTypeمنسوخ شده است.
-
تولیدگرها: امضای
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()استفاده کنید.-
utcnow(): ازdatetime.datetime.now(tz=datetime.UTC)استفاده کنید.utcfromtimestamp(): ازdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)استفاده کنید.
gettext: مقدار جمع باید یک عدد صحیح باشد.-
پارامتر debug_override تابع
cache_from_source()منسوخ شده است: به جای آن از پارامتر optimization استفاده کنید.
-
رابط تاپل
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_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
متدهای
threading:threading.Condition.notifyAll(): ازnotify_all()استفاده کنید.threading.Event.isSet(): ازis_set()استفاده کنید.threading.Thread.isDaemon()،threading.Thread.setDaemon(): از ویژگیthreading.Thread.daemonاستفاده کنید.threading.Thread.getName()وthreading.Thread.setName(): از ویژگیthreading.Thread.nameاستفاده کنید.threading.currentThread(): ازthreading.current_thread()استفاده کنید.threading.activeCount(): ازthreading.active_count()استفاده کنید.
کلاس داخلی
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¶
ویژگیهای جدید¶
توابع
PyArg_ParseArray()وPyArg_ParseArrayAndKeywords()برای تجزیهی آرگومانهای توابع با استفاده از قرارداد فراخوانیMETH_FASTCALLاضافه شدند. (مشارکتکننده: Victor Stinner در gh-144175.)توابع زیر برای نوع جدید
frozendictاضافه شدند:(مشارکتکننده: Victor Stinner در gh-141510.)
تابع
PyObject_CallFinalizerFromDealloc()به C API محدود اضافه شد. (مشارکتکننده: Victor Stinner در gh-146063.)توابع
PySys_GetAttr()،PySys_GetAttrString()،PySys_GetOptionalAttr()وPySys_GetOptionalAttrString()به عنوان جایگزینهایی برایPySys_GetObject()اضافه شدند. (مشارکتکننده: Serhiy Storchaka در gh-108512.)تابع
PyUnstable_Unicode_GET_CACHED_HASH()برای دریافت هش کششدهی یک رشته اضافه شد. برای اطلاع از نکات احتیاطی، مستندات را مطالعه کنید. (مشارکتکننده: Petr Viktorin در gh-131510.)API برای بررسی سازگاری ABI ماژول توسعهای اضافه شد:
Py_mod_abi،PyABIInfo_Check()وPyABIInfo_VAR. (مشارکتکننده: Petr Viktorin در gh-137210.)
پیادهسازی PEP 782، یعنی PyBytesWriter API انجام شد. توابع زیر اضافه شدند:
(تهیهشده توسط Victor Stinner در gh-129813.)
انواع
PyCriticalSectionو توابع مرتبط به ABI پایدار اضافه شدند. (تهیهشده توسط Petr Viktorin در gh-149225.)افزودن یک API جدید به نام
PyImport_CreateModuleFromInitfunc()در زبان C برای ایجاد یک ماژول از روی مشخصات (spec) و initfunc. (تهیهشده توسط Itamar Oren در gh-116146.)افزودن تابع
PyTuple_FromArray()برای ایجاد یکtupleاز روی یک آرایه. (تهیهشده توسط Victor Stinner در gh-111489.)افزودن یک قلاب (hook) جدید برای اکسپورت ماژول،
PyModExport_*.افزودن توابعی که استفاده از آنها در هندلرهای
tp_traverseکاملاً امن تضمین شده است:PyObject_GetTypeData_DuringGC()،PyObject_GetItemData_DuringGC()،PyType_GetModuleState_DuringGC()،PyModule_GetState_DuringGC()،PyModule_GetToken_DuringGC()،PyType_GetBaseByToken_DuringGC()،PyType_GetModule_DuringGC()،PyType_GetModuleByToken_DuringGC(). (تهیهشده توسط Petr Viktorin در gh-145925.)افزودن
PyObject_Dump()برای برونریزی (dump) یک شیء بهstderr. این تابع فقط باید برای اشکالزدایی استفاده شود. (تهیهشده توسط Victor Stinner در gh-141070.)پیادهسازی PEP 820:
PySlot-- سیستم جایگاه یکپارچه برای API زبان C. برای مستندات بیشتر به جایگاههای تعریف مراجعه کنید.این موارد اضافه شدند:
ساختار
PySlot؛تابع
PyType_FromSlots()؛شناسههای جایگاه جدید:
Py_slot_end،Py_slot_invalid؛Py_slot_subslots،Py_tp_slots،Py_mod_slots؛Py_tp_name،Py_tp_basicsize،Py_tp_extra_basicsize،Py_tp_itemsize،Py_tp_flags،Py_tp_metaclass،Py_tp_module؛ماکروهای کمکی:
PySlot_DATA،PySlot_FUNC،PySlot_SIZE،PySlot_INT64،PySlot_UINT64،PySlot_STATIC_DATA،PySlot_END،PySlot_PTR،PySlot_PTR_STATIC.
تابع
PyModule_FromSlotsAndSpec()و هوک صادر کردن ماژول module export hook با نامPyModExportنیز از ساختار جدیدPySlotاستفاده میکنند.توابع زیر دارای منسوخشدگی نرم هستند:
جایگاههای
Py_tp_basesوPy_tp_baseاکنون معادل هستند: میتوان آنها را روی یک نوع واحد یا یک تاپل از نوعها تنظیم کرد. جایگاهPy_tp_basesارجح است؛ اگر هر دو مشخص شده باشند، دیگری نادیده گرفته میشود.(مشارکتکننده: Petr Viktorin در gh-149044.)
توابع
PyUnstable_ThreadState_SetStackProtection()وPyUnstable_ThreadState_ResetStackProtection()اضافه شدند تا آدرس پایه محافظت از پشته و اندازهی محافظت از پشته برای وضعیت نخ پایتون تنظیم شود. (مشارکتکننده: Victor Stinner در gh-139653.)تابع API زبان C با نام
PyUnstable_SetImmortal()اضافه شد تا شیءها به عنوان نامیرا علامتگذاری شوند. (مشارکتکننده: Kumar Aditya در gh-143300.)بازگردانی تابع خصوصی و موقتی
_Py_InitializeMain()که در پایتون ۳.۱۴ حذف شده بود. (مشارکتکننده: Victor Stinner در gh-142417.)توابع
PyUnstable_DumpTraceback()وPyUnstable_DumpTracebackThreads()برای خروجی گرفتن از رد پشتههای (stacktraces) پایتون اضافه شدند. (مشارکتکننده: Alex Malyshev در gh-145559.)
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() در پایتون ۳.۱۳ و نسخههای قدیمیتر استفاده کرد.
تابعهای مقداردهی اولیهی پایتون:
Py_GetExecPrefix(): بهجای آن ازPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) استفاده کنید. اگر نیاز است محیطهای مجازی مدیریت شوند، ازPyConfig_Get("exec_prefix")(sys.exec_prefix) استفاده کنید.Py_GetPath(): بهجای آن ازPyConfig_Get("module_search_paths")(sys.path) استفاده کنید.Py_GetPrefix(): بهجای آن ازPyConfig_Get("base_prefix")(sys.base_prefix) استفاده کنید. اگر نیاز است محیطهای مجازی مدیریت شوند، ازPyConfig_Get("prefix")(sys.prefix) استفاده کنید.Py_GetProgramFullPath(): بهجای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetProgramName(): بهجای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetPythonHome(): بهجای آن ازPyConfig_Get("home")یا متغیر محیطیPYTHONHOMEاستفاده کنید.
(مشارکتکننده: Bénédikt Tran در gh-133644.)
رابطهای برنامهنویسی کاربردی 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_ALIGNED: بهجای آنalignasرا ترجیح دهید.PY_FORMAT_SIZE_T: از"z"مستقیماً استفاده کنید.Py_LLوPy_ULL: از پسوندهای استاندارد یعنیLLوULLاستفاده کنید.PY_LONG_LONG،PY_LLONG_MIN،PY_LLONG_MAX،PY_ULLONG_MAX،PY_INT32_T،PY_UINT32_T،PY_INT64_T،PY_UINT64_T،PY_SIZE_MAX: از انواع/حدود C99 استفاده کنید.Py_UNICODE_SIZE: مستقیماً ازsizeof(wchar_t)استفاده کنید.Py_VA_COPY: مستقیماً ازva_copyاستفاده کنید.
کلاندستور
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پاکسازی شدهاند.تمام پارامترهای
sqlite3.connect()به جز database اکنون فقط-کلیدواژه هستند.سه پارامتر اول متدهای
create_function()وcreate_aggregate()اکنون فقط-جایگاهی هستند.پارامتر اول متدهای
set_authorizer()،set_progress_handler()وset_trace_callback()اکنون فقط-جایگاهی است.
(تهیهشده توسط 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.)