تازههای پایتون 3.14¶
- ویرایشگرها:
Adam Turner و Hugo van Kemenade
این مقاله ویژگیهای جدید پایتون 3.14 را در مقایسه با 3.13 توضیح میدهد. پایتون 3.14 در تاریخ ۷ اکتبر ۲۰۲۵ منتشر شد. برای جزئیات کامل، فهرست تغییرات را ببینید.
همچنین ملاحظه نمائید
PEP 745 -- زمانبندی انتشار پایتون 3.14
خلاصه -- نکات برجسته انتشار¶
پایتون 3.14 جدیدترین نسخهی پایدار زبان برنامهنویسی پایتون است و ترکیبی از تغییرات در زبان، پیادهسازی و کتابخانه استاندارد را در بر میگیرد. بزرگترین تغییرات شامل مقادیر لفظی رشتهی قالبی، ارزیابی معوق حاشیهنویسیها و پشتیبانی از زیرمفسرها در کتابخانه استاندارد است.
تغییرات کتابخانه شامل بهبود چشمگیر قابلیتهای دروننگری در asyncio، پشتیبانی از Zstandard از طریق ماژول جدید compression.zstd، برجستهسازی سینتکس در REPL، و همچنین منسوخسازیها و حذفهای معمول، و بهبودهایی در کاربرپسندی و صحت است.
این مقاله تلاش نمیکند مشخصات کامل همهی ویژگیهای جدید را ارائه دهد، بلکه در عوض مروری مناسب از آنها فراهم میکند. برای جزئیات کامل به مستندات مراجعه کنید، از جمله مرجع کتابخانه و مرجع زبان. برای درک پیادهسازی کامل و منطق طراحی یک تغییر، به PEP مربوط به ویژگی جدید موردنظر مراجعه کنید؛ اما توجه داشته باشید که PEPها معمولاً پس از آنکه یک ویژگی بهطور کامل پیادهسازی شد، بهروز نگه داشته نمیشوند. برای راهنمایی درباره ارتقا از نسخههای پیشین پایتون، Porting to Python 3.14 را ببینید.
بهبودهای مفسر:
بهبودهای چشمگیر در کتابخانه استاندارد:
برجستهسازی سینتکس در پوسته تعاملی پیشفرض، و خروجی رنگی در چندین رابط خط فرمان کتابخانه استاندارد
بهبودهای C API:
پشتیبانی از پلتفرم:
PEP 776: Emscripten اکنون یک پلتفرم پشتیبانیشدهی رسمی در سطح ۳ است.
تغییرات انتشار:
قابلیتهای جدید¶
PEP 649 و PEP 749: ارزیابی معوق حاشیهنویسیها¶
حاشیهنویسیهای توابع، کلاسها و ماژولها دیگر بهطور فوری ارزیابی نمیشوند. در عوض، حاشیهنویسیها در توابع ویژهی حاشیهنویسی ذخیره میشوند و فقط هنگام نیاز ارزیابی میشوند (مگر اینکه از from __future__ import annotations استفاده شود).
این تغییر بهگونهای طراحی شده است که در بیشتر موارد کارایی و کاربردپذیری حاشیهنویسیها را در پایتون بهبود بخشد. هزینه رانتایم تعریف حاشیهنویسیها به حداقل رسیده است، اما همچنان میتوان حاشیهنویسیها را در زمان اجرا بازرسی کرد. اگر حاشیهنویسیها شامل ارجاع پیشرو باشند، دیگر لازم نیست آنها را درون رشته قرار دهید.
ماژول جدید annotationlib ابزارهایی برای بررسی حاشیهنویسیهای معوق فراهم میکند. حاشیهنویسیها را میتوان در قالب VALUE (که حاشیهنویسیها را به مقادیر زمان اجرا ارزیابی میکند، مشابه رفتار نسخههای پیشین پایتون)، قالب FORWARDREF (که نامهای تعریفنشده را با نشانگرهای ویژه جایگزین میکند) و قالب STRING (که حاشیهنویسیها را بهصورت رشته برمیگرداند) ارزیابی کرد.
این مثال نشان میدهد که این قالبها چگونه رفتار میکنند:
>>> from annotationlib import get_annotations, Format
>>> def func(arg: Undefined):
... pass
>>> get_annotations(func, format=Format.VALUE)
Traceback (most recent call last):
...
NameError: name 'Undefined' is not defined
>>> get_annotations(func, format=Format.FORWARDREF)
{'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}
>>> get_annotations(func, format=Format.STRING)
{'arg': 'Undefined'}
بخش انتقال شامل راهنماییهایی دربارهی تغییراتی است که ممکن است به دلیل این تغییرات لازم باشند، هرچند در اکثر موارد، کد بدون تغییر به کار خود ادامه خواهد داد.
(مشارکتکرده توسط Jelle Zijlstra در PEP 749 و gh-119180؛ PEP 649 توسط Larry Hastings نوشته شد.)
PEP 734: مفسرهای متعدد در کتابخانه استاندارد¶
رانتایم سیپایتون از اجرای همزمان چند رونوشت از پایتون در یک فرایند واحد پشتیبانی میکند و بیش از ۲۰ سال است که این کار را انجام میدهد. هر یک از این رونوشتهای جداگانه «مفسر» نامیده میشود. با این حال، این قابلیت تنها از طریق C-API در دسترس بوده است.
این محدودیت در پایتون 3.14 با ماژول جدید concurrent.interpreters برداشته شده است.
دستکم دو دلیل قابلتوجه وجود دارد که چرا استفاده از چند مفسر مزایای چشمگیری دارد:
آنها از یک مدل همروندی جدید (برای پایتون) و دوستدار انسان پشتیبانی میکنند
موازیسازی واقعی چندهستهای
برای برخی موارد استفاده، همروایی در نرمافزار در نگاه کلان کارایی را بهبود میبخشد و میتواند طراحی را سادهتر کند. در همان حال، پیادهسازی و نگهداری هر نوع همروایی به جز سادهترینها، اغلب برای مغز انسان تلاشی طاقتفرسا است. این موضوع بهویژه در مورد نخهای ساده صدق میکند (برای مثال، threading)، که در آنها تمام حافظه میان همهی نخها مشترک است.
با چندین مفسر ایزوله، میتوانید از دستهای از مدلهای همزمانی، مانند فرایندهای ترتیبی ارتباطبرقرارکننده (CSP) یا مدل بازیگر (actor)، که در زبانهای برنامهنویسی دیگر مانند Smalltalk، Erlang، Haskell و Go به موفقیت دست یافتهاند، بهره ببرید. مفسرهای متعدد را مانند نخها در نظر بگیرید، اما با اشتراکگذاری اختیاری.
دربارهی موازیسازی چندهستهای: از پایتون 3.12 به بعد، مفسرها اکنون به اندازهی کافی از یکدیگر جدا شدهاند تا بتوان از آنها به صورت موازی استفاده کرد (به PEP 684 مراجعه کنید). این امر انواعی از موارد استفادهی سنگین از نظر CPU را برای پایتون ممکن میسازد که توسط GIL محدود شده بودند.
استفاده از چندین مفسر از بسیاری جهات شبیه به multiprocessing است، از این جهت که هر دو «فرایندهای» منطقی جداشدهای فراهم میکنند که میتوانند بهطور موازی اجرا شوند و بهطور پیشفرض هیچ اشتراکی ندارند. با این حال، هنگام استفاده از چندین مفسر، یک برنامه منابع سیستمی کمتری استفاده میکند و کارآمدتر عمل میکند (زیرا در همان فرایند باقی میماند). چندین مفسر را اینگونه در نظر بگیرید: جداسازی فرایندها همراه با کارایی نخها.
اگرچه این ویژگی چند دهه است که وجود دارد، اما مفسرهای چندگانه به دلیل آگاهی کم و نبود ماژولی در کتابخانه استاندارد، بهطور گسترده استفاده نشدهاند. در نتیجه، این مفسرها در حال حاضر چندین محدودیت قابل توجه دارند که انتظار میرود اکنون که این ویژگی به جریان اصلی تبدیل میشود، بهطور چشمگیری بهبود یابند.
محدودیتهای فعلی:
راهاندازی هر مفسر هنوز بهینهسازی نشده است
هر مفسر بیش از حافظهی لازم استفاده میکند (کار روی اشتراکگذاری داخلی گسترده میان مفسرها ادامه دارد)
گزینههای زیادی برای اشتراکگذاری واقعی اشیاء یا دادههای دیگر بین مفسرها هنوز وجود ندارد (بهجز
memoryview)بسیاری از ماژولهای توسعهای شخص ثالث در PyPI هنوز با چندین مفسر سازگار نیستند (تمام ماژولهای توسعهای کتابخانه استاندارد سازگار هستند)
رویکرد به نوشتن برنامههایی که از چندین مفسر ایزوله استفاده میکنند، فعلاً برای کاربران پایتون عمدتاً ناآشناست
تأثیر این محدودیتها به بهبودهای آتی سیپایتون، نحوه استفاده از مفسرها و مسائلی که کامیونیتی از طریق بستههای PyPI حل میکند، بستگی خواهد داشت. بسته به مورد استفاده، ممکن است این محدودیتها تأثیر چندانی نداشته باشند، پس آن را امتحان کنید!
علاوه بر این، نسخههای آیندهی سیپایتون سربار را کاهش داده یا حذف خواهند کرد و ابزارهایی فراهم خواهند کرد که کمتر مناسب است در PyPI قرار بگیرند. در این میان، بیشترِ محدودیتها را میتوان از طریق ماژولهای توسعهای نیز برطرف کرد؛ به این معنا که بستههای PyPI میتوانند برای 3.14 هر شکافی را پر کنند و حتی تا 3.12، نسخهای که در آن مفسرها سرانجام بهدرستی جدا شدند و اشتراک قفل مفسر سراسری را متوقف کردند. به همین ترتیب، انتظار میرود کتابخانههایی در PyPI برای انتزاعهای سطح بالا بر فراز مفسرها پدیدار شوند.
در مورد ماژولهای توسعهای، کار برای بهروزرسانی برخی پروژههای PyPI و همچنین ابزارهایی مانند Cython، pybind11، nanobind و PyO3 در جریان است. مراحل جداسازی یک ماژول توسعهای در جداسازی ماژولهای توسعه آمده است. جداسازی یک ماژول با آنچه برای پشتیبانی از نخبندی آزاد لازم است، همپوشانی زیادی دارد؛ بنابراین کارهای جاری کامیونیتی در این حوزه به تسریع پشتیبانی از مفسرهای متعدد کمک خواهد کرد.
همچنین در 3.14 افزوده شد: concurrent.futures.InterpreterPoolExecutor.
(مشارکتشده توسط اریک اسنو در gh-134939.)
همچنین ملاحظه نمائید
PEP 750: مقادیر لفظی رشته قالبی¶
رشتههای قالبی سازوکار جدیدی برای پردازش سفارشی رشتهها هستند. آنها سینتکس آشنای افاسترینگها را به اشتراک میگذارند، اما برخلاف افاسترینگها، بهجای یک str ساده، شیئی را برمیگردانند که بخشهای ایستا و درونیابیشدهی رشته را نمایندگی میکند.
برای نوشتن یک تیاسترینگ، بهجای پیشوند 'f' از پیشوند 't' استفاده کنید:
>>> variety = 'Stilton'
>>> template = t'Try some {variety} cheese!'
>>> type(template)
<class 'string.templatelib.Template'>
اشیاء Template دسترسی به بخشهای ایستا و درونیابیشده (درون آکولادها) یک رشته را پیش از ترکیب شدن آنها فراهم میکنند. برای دسترسی به بخشهایشان به ترتیب، روی نمونههای Template پیمایش کنید:
>>> list(template)
['Try some ', Interpolation('Stilton', 'variety', None, ''), ' cheese!']
نوشتن (یا فراخوانی) کد برای پردازش نمونههای Template آسان است. برای مثال، تابع زیر بخشهای ایستا را با حروف کوچک و نمونههای Interpolation را با حروف بزرگ رندر میکند:
from string.templatelib import Interpolation
def lower_upper(template):
"""Render static parts lowercase and interpolations uppercase."""
parts = []
for part in template:
if isinstance(part, Interpolation):
parts.append(str(part.value).upper())
else:
parts.append(part.lower())
return ''.join(parts)
name = 'Wenslydale'
template = t'Mister {name}'
assert lower_upper(template) == 'mister WENSLYDALE'
از آنجا که نمونههای Template در زمان اجرا بین رشتههای ایستا و درونیابیها تمایز قائل میشوند، میتوانند برای پاکسازی ورودی کاربر مفید باشند. نوشتن تابع html() که ورودی کاربر را در HTML خنثی کند، تمرینی است که به خواننده واگذار میشود! کد پردازش قالب میتواند انعطافپذیری بهتری فراهم کند. برای نمونه، تابع html() پیشرفتهتری میتواند یک dict از ویژگیهای HTML را مستقیماً در قالب بپذیرد:
attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}
template = t'<img {attributes}>'
assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'
البته، کد پردازش قالب لازم نیست نتیجهای شبهرشته را بازگرداند. یک html() حتی پیشرفتهتر میتواند نوعی سفارشی را بازگرداند که ساختاری شبهDOM را نمایندگی میکند.
با وجود تیاسترینگها، توسعهدهندگان میتوانند سیستمهایی بنویسند که SQL را پاکسازی کنند، عملیات پوسته را بهصورت امن انجام دهند، گزارشگیری را بهبود بخشند، به ایدههای مدرن در توسعه وب (HTML، CSS و غیره) بپردازند و زبانهای اختصاصی دامنه (DSL) سبکوزن و سفارشی کسبوکار را پیادهسازی کنند.
(مشارکتشده توسط Jim Baker، Guido van Rossum، Paul Everitt، Koudai Aono، Lysandros Nikolaou، Dave Peck، Adam Turner، Jelle Zijlstra، Bénédikt Tran و Pablo Galindo Salgado در gh-132661.)
همچنین ملاحظه نمائید
PEP 768: رابط امن اشکالزدای خارجی¶
پایتون 3.14 یک رابط اشکالزدایی بدون سربار معرفی میکند که به اشکالزداها و پروفایلگیرها اجازه میدهد تا بهطور ایمن به فرایندهای در حال اجرای پایتون متصل شوند، بدون توقف یا راهاندازی مجدد آنها. این ارتقای قابل توجهی در قابلیتهای اشکالزدایی پایتون است، به این معنا که دیگر نیازی به جایگزینهای ناامن نیست.
رابط جدید نقاط اجرای امن را برای اتصال کد اشکالزدا فراهم میکند، بدون آنکه مسیر اجرای عادی مفسر را تغییر دهد یا هیچ سرباری در رانتایم ایجاد کند. به همین دلیل، ابزارها اکنون میتوانند برنامههای پایتون را بهصورت بلادرنگ بررسی کرده و با آنها تعامل کنند؛ این قابلیتی حیاتی برای سیستمهای با دسترسیپذیری بالا و محیطهای تولید است.
برای سهولت، این رابط در تابع sys.remote_exec() پیادهسازی شده است. برای مثال:
import sys
from tempfile import NamedTemporaryFile
with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
script_path = f.name
f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')
# Execute in process with PID 1234
print('Behold! An offering:')
sys.remote_exec(1234, script_path)
این تابع امکان ارسال کد پایتون به یک فرایند هدف را فراهم میکند تا در نقطه اجرای ایمن بعدی اجرا شود. با این حال، نویسندگان ابزار همچنین میتوانند پروتکل را مستقیماً همانطور که در PEP توضیح داده شده پیادهسازی کنند؛ این PEP سازوکارهای زیرین مورد استفاده برای اتصال ایمن به فرایندهای در حال اجرا را تشریح میکند.
رابط اشکالزدایی با در نظر گرفتن امنیت، با دقت طراحی شده است و شامل چندین سازوکار برای کنترل دسترسی است:
متغیر محیطی
PYTHON_DISABLE_REMOTE_DEBUG.یک گزینهی خط فرمان
-X disable-remote-debug.یک پرچم configure با نام
--without-remote-debugبرای غیرفعالسازی کامل این قابلیت در زمان ساخت.
(مشارکتشده توسط پابلو گالیندو سالگادو، مت وازنیسکی و ایوونا استویانوویچ در gh-131591.)
همچنین ملاحظه نمائید
نوع جدیدی از مفسر¶
نوع جدیدی از مفسر به سیپایتون افزودهشده است. این مفسر بهجای یک دستور case بزرگ در C، از فراخوانیهای دمی بین توابع کوچک C که آپکدهای منفرد پایتون را پیادهسازی میکنند، استفاده میکند. برای برخی از کامپایلرهای جدیدتر، این مفسر کارایی بهمراتب بهتری فراهم میکند. بنچمارکهای اولیه نشان میدهند که بسته به سکو و معماری، میانگین هندسی افزایش سرعت در بدنه بنچمارک استاندارد pyperformance برابر با ۳ تا ۵ درصد است. خط پایه، Python 3.14 است که با Clang 19 و بدون این مفسر جدید ساختهشده است.
این مفسر در حال حاضر فقط با Clang 19 و نسخههای جدیدتر روی معماریهای x86-64 و AArch64 کار میکند. با این حال، انتظار میرود یک نسخهی آینده از GCC نیز از آن پشتیبانی کند.
این قابلیت فعلاً بهصورت اختیاری (opt-in) است. هنگام استفاده از مفسر جدید، فعال کردن بهینهسازی هدایتشده با پروفایل (profile-guided optimization) بهشدت توصیه میشود، زیرا این تنها پیکربندیای است که برای بهبود کارایی آزمایش و اعتبارسنجی شده است. برای اطلاعات بیشتر، --with-tail-call-interp را ببینید.
توجه
این نباید با بهینهسازی فراخوانی دنبالهای (tail call optimization) توابع پایتون اشتباه گرفته شود؛ این بهینهسازی در حال حاضر در سیپایتون پیادهسازی نشده است.
این نوع جدید مفسر، از جزئیات داخلی پیادهسازی مفسر سیپایتون است. به هیچ وجه رفتار قابل مشاهدهی برنامههای پایتون را تغییر نمیدهد. میتواند کارایی آنها را بهبود بخشد، اما چیز دیگری را تغییر نمیدهد.
(با مشارکت Ken Jin در gh-128563، همراه با ایدههایی دربارهی نحوهی پیادهسازی این مورد در سیپایتون از سوی Mark Shannon، Garrett Gu، Haoran Xu و Josh Haberman.)
بهبودهای حالت نخآزاد¶
حالت نخآزاد سیپایتون (PEP 703) که نخستینبار در 3.13 اضافه شد، در پایتون 3.14 بهطور قابل توجهی بهبود یافته است. پیادهسازی توصیفشده در PEP 703، از جمله تغییرات در C API، تکمیل شده است و راهکارهای موقت در مفسر با راهکارهای پایدارتر جایگزین شدند. مفسر تطبیقی تخصصساز (PEP 659) اکنون در حالت نخآزاد فعال شده است که در کنار بسیاری از بهینهسازیهای دیگر، کارایی آن را بهطور چشمگیری بهبود میبخشد. افت کارایی کد تکنخی در حالت نخآزاد اکنون، بسته به پلتفرم و کامپایلر C استفادهشده، حدود ۵ تا ۱۰ درصد است.
از پایتون 3.14 به بعد، هنگام کامپایل کردن ماژولهای توسعهای برای نسخهی نخآزاد سیپایتون در ویندوز، متغیر پیشپردازندهی Py_GIL_DISABLED اکنون باید توسط بکاند ساخت مشخص شود، زیرا دیگر بهطور خودکار توسط کامپایلر C تعیین نخواهد شد. برای یک مفسر در حال اجرا، میتوان تنظیمی را که در زمان کامپایل استفاده شده است، از طریق sysconfig.get_config_var() پیدا کرد.
پرچم جدید -X context_aware_warnings کنترل میکند که آیا کنترل همزمانایمن هشدارها فعال است یا خیر. مقدار پیشفرض این پرچم برای ساخت نخآزاد true و برای ساخت دارای قفل مفسر سراسری false است.
پرچم جدید thread_inherit_context افزوده شده است که در صورت فعال بودن، به این معناست که نخهایی که با threading.Thread ایجاد میشوند، با رونوشتی از Context() فراخوانکنندهی start() آغاز میشوند. مهمتر از همه، این امر باعث میشود زمینهی فیلتر کردن هشدار که توسط catch_warnings برقرار شده است، توسط نخها (یا وظیفههای asyncio) که در آن زمینه آغاز شدهاند «به ارث برده شود». این پرچم بر ماژولهای دیگری که از متغیرهای زمینه استفاده میکنند نیز اثر میگذارد، مانند مدیر زمینهی decimal. مقدار پیشفرض این پرچم در ساخت نخآزاد true و در ساخت دارای قفل مفسر سراسری false است.
(با مشارکت Sam Gross، Matt Page، Neil Schemenauer، Thomas Wouters، Donghee Na، Kirill Podoprigora، Ken Jin، Itamar Oren، Brett Simmers، Dino Viehland، Nathan Goldbaum، Ralf Gommers، Lysandros Nikolaou، Kumar Aditya، Edgar Margffoy و بسیاری دیگر. برخی از این مشارکتکنندگان در استخدام متا هستند؛ شرکتی که همچنان منابع مهندسی قابلتوجهی برای پشتیبانی از این پروژه فراهم کرده است.)
پیامهای خطای بهبودیافته¶
مفسر اکنون هنگام تشخیص غلطهای تایپی در کلیدواژههای پایتون، پیشنهادهای مفیدی ارائه میدهد. هنگامی که با واژهای مواجه شود که شباهت نزدیکی به یک کلیدواژهی پایتون دارد، مفسر کلیدواژهی درست را در پیام خطا پیشنهاد میکند. این قابلیت به برنامهنویسان کمک میکند تا اشتباهات تایپی رایج را بهسرعت شناسایی و برطرف کنند. برای مثال:
>>> whille True: ... pass Traceback (most recent call last): File "<stdin>", line 1 whille True: ^^^^^^ SyntaxError: invalid syntax. Did you mean 'while'?
هرچند این ویژگی بر رایجترین موارد تمرکز دارد، ممکن است برخی گونههای غلطهای املایی همچنان به خطاهای سینتکس معمولی منجر شوند. (مشارکتشده توسط Pablo Galindo در gh-132449.)
دستورهای
elifکه پس از یک بلوکelseقرار میگیرند، اکنون پیام خطای اختصاصی دارند. (مشارکتشده توسط استیل فارنزورث در gh-129902.)>>> if who == "me": ... print("It's me!") ... else: ... print("It's not me!") ... elif who is None: ... print("Who is it?") File "<stdin>", line 5 elif who is None: ^^^^ SyntaxError: 'elif' block follows an 'else' block
اگر دستوری پس از
elseبه عبارات شرطی گذرانده شود، یا یکی ازpass،breakیاcontinueپیش ازifگذرانده شود، پیام خطا محلی را کهexpressionدر آن لازم است برجسته میکند. (مشارکت Sergey Miryanov در gh-129515.)>>> x = 1 if True else pass Traceback (most recent call last): File "<string>", line 1 x = 1 if True else pass ^^^^ SyntaxError: expected expression after 'else', but statement is given >>> x = continue if True else break Traceback (most recent call last): File "<string>", line 1 x = continue if True else break ^^^^^^^^ SyntaxError: expected expression before 'if', but statement is given
هنگامی که رشتههای بهنادرستی بستهشده تشخیص داده شوند، پیام خطا پیشنهاد میکند که ممکن است رشته بهعنوان بخشی از رشته در نظر گرفته شده باشد. (مشارکتشده توسط Pablo Galindo در gh-88535.)
>>> "The interesting object "The important object" is very important" Traceback (most recent call last): SyntaxError: invalid syntax. Is this intended to be part of the string?
هنگامی که رشتهها پیشوندهای ناسازگار داشته باشند، خطا اکنون نشان میدهد که کدام پیشوندها ناسازگار هستند. (مشارکت نیکیتا سوبولف در gh-133197.)
>>> ub'abc' File "<python-input-0>", line 1 ub'abc' ^^ SyntaxError: 'u' and 'b' prefixes are incompatible
بهبود پیامهای خطا هنگام استفاده از
asبا مقصدهای ناسازگار در:ایمپورتها:
import ... as ...ایمپورتهای from:
from ... import ... as ...هندلرهای except:
except ... as ...حالتهای تطبیق الگو:
case ... as ...
(مشارکتشده توسط نیکیتا سوبولف در gh-123539، gh-123562 و gh-123440.)
پیام خطا هنگام تلاش برای افزودن نمونهای از یک نوع هشناپذیر به
dictیاsetبهبود یافت. (مشارکتشده توسط CF Bolz-Tereick و Victor Stinner در gh-132828.)>>> s = set() >>> s.add({'pages': 12, 'grade': 'A'}) Traceback (most recent call last): File "<python-input-1>", line 1, in <module> s.add({'pages': 12, 'grade': 'A'}) ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: cannot use 'dict' as a set element (unhashable type: 'dict') >>> d = {} >>> l = [1, 2, 3] >>> d[l] = 12 Traceback (most recent call last): File "<python-input-4>", line 1, in <module> d[l] = 12 ~^^^ TypeError: cannot use 'list' as a dict key (unhashable type: 'list')
پیام خطا هنگامی که شیئی که از پروتکل مدیر زمینه همگام پشتیبانی میکند با
async withبه جایwithوارد میشود، و بالعکس برای پروتکل مدیر زمینه ناهمگام، بهبود یافت. (مشارکت Bénédikt Tran در gh-128398.)
PEP 784: پشتیبانی از Zstandard در کتابخانه استاندارد¶
The new compression package contains modules compression.lzma,
compression.bz2, compression.gzip and compression.zlib
which re-export the lzma, bz2, gzip and zlib
modules respectively. The new import names under compression are the
preferred names for importing these compression modules from Python 3.14. However,
the existing modules names have not been deprecated. Any deprecation or removal
of the existing compression modules will occur no sooner than five years after
the release of 3.14.
The new compression.zstd module provides compression and decompression
APIs for the Zstandard format via bindings to Meta's zstd library. Zstandard is a widely adopted, highly
efficient, and fast compression format. In addition to the APIs introduced in
compression.zstd, support for reading and writing Zstandard compressed
archives has been added to the tarfile, zipfile, and
shutil modules.
در اینجا مثالی از استفاده از ماژول جدید برای فشردهسازی برخی دادهها آمده است:
from compression import zstd
import math
data = str(math.pi).encode() * 20
compressed = zstd.compress(data)
ratio = len(compressed) / len(data)
print(f"Achieved compression ratio of {ratio}")
همانطور که میبینید، API شبیه به APIهای ماژولهای lzma و bz2 است.
(مشارکتشده توسط Emma Harper Smith، Adam Turner، Gregory P. Smith، Tomas Roun، Victor Stinner و Rogdham در gh-132983.)
همچنین ملاحظه نمائید
قابلیتهای دروننگری asyncio¶
رابط خط فرمان جدیدی برای بررسی فرایندهای در حال اجرای پایتون با استفاده از وظایف ناهمگام اضافه شد که از طریق python -m asyncio ps PID یا python -m asyncio pstree PID در دسترس است.
زیرفرمان ps شناسهی فرایند (PID) دادهشده را بررسی میکند و اطلاعاتی دربارهی وظایف asyncio در حال اجرا نمایش میدهد. این زیرفرمان یک جدول وظایف را خروجی میدهد: فهرستی تخت از همهی وظایف، نامهای آنها، پشتههای همروال آنها، و اینکه کدام وظایف در انتظار آنها هستند.
زیرفرمان pstree همان اطلاعات را بازیابی میکند، اما بهجای آن یک درخت بصری از فراخوانیهای ناهمگام ترسیم میکند که روابط میان همروالها را در قالبی سلسلهمراتبی نشان میدهد. این فرمان بهطور خاص برای اشکالزدایی برنامههای ناهمگامِ طولانیمدت یا گیرکرده مفید است. این فرمان به توسعهدهندگان کمک میکند تا بهسرعت تشخیص دهند که برنامه در کجا مسدود شده است، چه وظایفی در انتظار هستند و همروالها چگونه به یکدیگر زنجیر شدهاند.
برای مثال، با فرض این کد:
import asyncio
async def play_track(track):
await asyncio.sleep(5)
print(f'🎵 Finished: {track}')
async def play_album(name, tracks):
async with asyncio.TaskGroup() as tg:
for track in tracks:
tg.create_task(play_track(track), name=track)
async def main():
async with asyncio.TaskGroup() as tg:
tg.create_task(
play_album('Sundowning', ['TNDNBTG', 'Levitate']),
name='Sundowning')
tg.create_task(
play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
name='TMBTE')
if __name__ == '__main__':
asyncio.run(main())
اجرای ابزار جدید بر روی فرایند در حال اجرا، جدولی مانند این تولید خواهد کرد:
python -m asyncio ps 12345
tid task id task name coroutine stack awaiter chain awaiter name awaiter id
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1935500 0x7fc930c18050 Task-1 TaskGroup._aexit -> TaskGroup.__aexit__ -> main 0x0
1935500 0x7fc930c18230 Sundowning TaskGroup._aexit -> TaskGroup.__aexit__ -> album TaskGroup._aexit -> TaskGroup.__aexit__ -> main Task-1 0x7fc930c18050
1935500 0x7fc93173fa50 TMBTE TaskGroup._aexit -> TaskGroup.__aexit__ -> album TaskGroup._aexit -> TaskGroup.__aexit__ -> main Task-1 0x7fc930c18050
1935500 0x7fc93173fdf0 TNDNBTG sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c18230
1935500 0x7fc930d32510 Levitate sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c18230
1935500 0x7fc930d32890 DYWTYLM sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa50
1935500 0x7fc93161ec30 Aqua Regia sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa50
یا درختی مانند این:
python -m asyncio pstree 12345
└── (T) Task-1
└── main example.py:13
└── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
└── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
├── (T) Sundowning
│ └── album example.py:8
│ └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
│ └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
│ ├── (T) TNDNBTG
│ │ └── play example.py:4
│ │ └── sleep Lib/asyncio/tasks.py:702
│ └── (T) Levitate
│ └── play example.py:4
│ └── sleep Lib/asyncio/tasks.py:702
└── (T) TMBTE
└── album example.py:8
└── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
└── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
├── (T) DYWTYLM
│ └── play example.py:4
│ └── sleep Lib/asyncio/tasks.py:702
└── (T) Aqua Regia
└── play example.py:4
└── sleep Lib/asyncio/tasks.py:702
اگر چرخهای در گراف await ناهمگام شناسایی شود (که میتواند نشاندهندهی یک مشکل برنامهنویسی باشد)، ابزار خطا ایجاد میکند و مسیرهای چرخهای که از ساخت درخت جلوگیری میکنند را فهرست میکند:
python -m asyncio pstree 12345
ERROR: await-graph contains cycles - cannot print a tree!
cycle: Task-2 → Task-3 → Task-2
(مشارکتشده توسط پابلو گالیندو، ووکاش لانگا، یوری سلیوانوف و مارتا گومز ماسیاس در gh-91048.)
کنترل همزمانایمن هشدارها¶
مدیر زمینهی warnings.catch_warnings اکنون بهصورت اختیاری از یک متغیر زمینه برای فیلترهای هشدار استفاده میکند. این قابلیت با تنظیم پرچم context_aware_warnings، از طریق گزینهی خط فرمان -X یا یک متغیر محیطی فعال میشود. این امر کنترل قابل پیشبینی هشدارها را هنگام استفاده از catch_warnings در ترکیب با چندین نخ یا وظایف ناهمگام فراهم میکند. مقدار پیشفرض این پرچم در نسخهی نخآزاد true و در نسخهی دارای قفل مفسر سراسری false است.
(مشارکتشده توسط Neil Schemenauer و Kumar Aditya در gh-130010.)
سایر تغییرات زبان¶
اکنون همه صفحههای کد ویندوز بهصورت کدکهای 'cpXXX' در ویندوز پشتیبانی میشوند. (مشارکت Serhiy Storchaka در gh-123803.)
پیادهسازی قواعد حساب ترکیبی (mixed-mode arithmetic) میان اعداد حقیقی و مختلط، مطابق با آنچه استاندارد C از C99 به بعد مشخص کرده است. (با مشارکت Sergey B Kirpichev در gh-69639.)
اکنون خطاهای نحوی بیشتری صرفنظر از بهینهسازی و گزینهی خط فرمان
-Oتشخیص داده میشوند. این شامل نوشتن در__debug__، استفادهی نادرست ازawait، و درکهای ناهمگام خارج از توابع ناهمگام است. برای مثال،python -O -c 'assert (__debug__ := 1)'یاpython -O -c 'assert await 1'اکنونSyntaxErrorتولید میکنند. (مشارکتشده توسط Irit Katriel و Jelle Zijlstra در gh-122245 و gh-121637.)هنگام زیرکلاسسازی یک نوع C خالص، جایگاههای C برای نوع جدید دیگر هنگام ایجاد کلاس با نسخهی پوششی جایگزین نمیشوند، مگر آنکه بهطور صریح در زیرکلاس بازنویسی شده باشند. (مشارکتشده توسط Tomasz Pytel در gh-132284.)
توکارها¶
متدهای
bytes.fromhex()وbytearray.fromhex()اکنونbytesاسکی و اشیاء شبهبایت را میپذیرند. (مشارکتشده توسط Daniel Pope در gh-129349.)افزودن متدهای کلاس
float.from_number()وcomplex.from_number()برای تبدیل یک عدد بهطور متناظر به نوعfloatیاcomplex. این متدها در صورتی که آرگومان یک عدد حقیقی نباشد،TypeErrorایجاد میکنند. (مشارکتشده توسط Serhiy Storchaka در gh-84978.)پشتیبانی از زیرخط و ویرگول بهعنوان جداکنندههای هزارگان در بخش کسری برای انواع نمایش ممیز شناور در قالببندی رشتهی سبک جدید (با
format()یا افاسترینگها). (مشارکتشده توسط سرگئی بی. کیرپیچف در gh-87790.)تابع
int()دیگر به__trunc__()واگذار نمیکند. کلاسهایی که میخواهند از تبدیل بهint()پشتیبانی کنند، باید__int__()یا__index__()را پیادهسازی کنند. (مشارکتشده توسط Mark Dickinson در gh-119743.)تابع
map()اکنون مانندzip()یک پرچم اختیاریِ فقطکلیدواژهای strict دارد که بررسی میکند همهی پیمایشپذیرها طول برابر داشته باشند. (ارائهشده توسط Wannes Boeykens در gh-119793.)نوع
memoryviewاکنون از زیرنویسی پشتیبانی میکند و به یک نوع عام تبدیل میشود. (مشارکتشده توسط Brian Schubert در gh-126012.)استفاده از
NotImplementedدر یک زمینه بولی اکنون باعث ایجادTypeErrorمیشود. این مورد از پایتون 3.9 یکDeprecationWarningایجاد میکرد. (مشارکتشده توسط Jelle Zijlstra در gh-118767.)pow()سهآرگومنی اکنون در صورت لزوم تلاش میکند__rpow__()را فراخوانی کند. پیشتر این متد فقط درpow()دوآرگومنی و عملگر دودویی توان فراخوانی میشد. (مشارکتشده توسط Serhiy Storchaka در gh-130104.)اشیای
superاکنونکپیپذیروپیکلپذیرهستند. (مشارکت Serhiy Storchaka در gh-125767.)
خط فرمان و محیط¶
پرچم زمان ایمپورت اکنون میتواند از طریق
-X importtime=2جدید، ماژولهایی را که از قبل بارگذاری شدهاند ('cached') پیگیری کند. هنگامی که چنین ماژولی ایمپورت میشود، زمانهایselfوcumulativeبا رشتهیcachedجایگزین میشوند.مقادیر بالاتر از
2برای-X importtimeاکنون برای استفاده در آینده رزرو شدهاند.(با مشارکت Noah Kim و Adam Turner در gh-118655.)
گزینهی خط فرمان
-cاکنون پیش از اجرا، آرگومان کد خود را بهطور خودکار حذف تورفتگی (dedent) میکند. رفتار حذف تورفتگی خودکار مشابهtextwrap.dedent()است. (مشارکتشده توسط Jon Crall و Steven Sun در gh-103998.)پرچم
-Jدیگر برای Jython رزروشده نیست و اکنون معنای خاصی ندارد. (مشارکتشده توسط Adam Turner در gh-133336.)
PEP 758: اجازه دادن به عبارتهای except و except* بدون پرانتز¶
عبارتهای except و except* اکنون اجازه میدهند که در صورت وجود چندین نوع استثنا و عدم استفاده از بند as، پرانتزها حذف شوند. برای مثال:
try:
connect_to_server()
except TimeoutError, ConnectionRefusedError:
print('The network has ceased to be!')
(مشارکتشده توسط پابلو گالیندو و برت کانون در PEP 758 و gh-131831.)
PEP 765: جریان کنترل در بلوکهای finally¶
کامپایلر اکنون هنگامی که دستور return، break یا continue باعث خروج از بلوک finally میشود، SyntaxWarning منتشر میکند. این تغییر در PEP 765 مشخص شده است.
در موقعیتهایی که این تغییر ناخوشایند است (مانند مواردی که هشدارها بهدلیل لینتکردن کد (code linting) زائد هستند)، میتوان با افزودن ignore::SyntaxWarning بهعنوان یک فیلتر، از فیلتر هشدار برای غیرفعال کردن تمام هشدارهای سینتکس استفاده کرد. این را میتوان در ترکیب با فیلتری که هشدارهای دیگر را به خطا تبدیل میکند، مشخص کرد (برای مثال، ارسال -Werror -Wignore::SyntaxWarning بهعنوان گزینههای CLI، یا تنظیم PYTHONWARNINGS=error,ignore::SyntaxWarning).
توجه داشته باشید که اعمال چنین فیلتری در زمان اجرا با استفاده از ماژول warnings تنها هشدار را در کدی که پس از تنظیم فیلتر کامپایل میشود سرکوب خواهد کرد. کدی که پیش از تنظیم فیلتر کامپایل شده است (برای مثال، زمانی که یک ماژول ایمپورت میشود) همچنان هشدار سینتکس را منتشر خواهد کرد.
(مشارکتشده توسط ایریت کاتریل در gh-130080.)
زبالهروبی¶
از پایتون 3.14.5 به بعد:
زبالهروب (GC) در پایتون 3.14.5 تغییر کرده است.
پایتون 3.14.0-3.14.4 به همراه یک زبالهروب افزایشی (incremental GC) جدید عرضه شد. با این حال، به دلیل تعدادی گزارش از فشار قابل توجه بر حافظه در محیطهای عملیاتی، به زبالهروب نسلی (generational GC) نسخهی 3.13 بازگردانده شد. این همان زبالهروب است که اکنون در پایتون 3.14.5 و نسخههای بعدی استفاده میشود.
پیشتر در پایتون 3.14.0-3.14.4:
زبالهروب چرخهای اکنون افزایشی است. این بدان معناست که بیشینه زمانهای مکث برای هیپهای بزرگتر به میزان یک مرتبه بزرگی یا بیشتر کاهش مییابد.
اکنون فقط دو نسل وجود دارد: جوان و پیر. وقتی gc.collect() مستقیماً فراخوانی نشود، زبالهروب کمی کمتر فراخوانی میشود. هنگام فراخوانی، بهجای جمعآوری یک یا چند نسل، نسل جوان و بخشی از نسل پیر را جمعآوری میکند.
رفتار gc.collect() کمی تغییر میکند:
gc.collect(1): یک مرحله از زبالهروبی را انجام میدهد، نه اینکه نسل ۱ را جمعآوری کند.سایر فراخوانیهای
gc.collect()بدون تغییر باقی میمانند.
(مشارکت Mark Shannon در gh-108362.)
پوسته تعاملی پیشفرض¶
پوستهی interactive پیشفرض اکنون سینتکس پایتون را برجستهسازی میکند. این قابلیت بهطور پیشفرض فعال است، مگر اینکه
PYTHON_BASIC_REPLیا هر متغیر محیطی دیگری که رنگ را غیرفعال میکند تنظیم شده باشد. برای جزئیات به کنترل رنگ مراجعه کنید.تم رنگی پیشفرض برجستهسازی سینتکس میکوشد کنتراست خوبی داشته باشد و برای حداکثر سازگاری، تنها از کدهای رنگ ANSI استاندارد VGA چهاربیتی استفاده میکند. این تم را میتوان با استفاده از یک API آزمایشی
_colorize.set_theme()سفارشیسازی کرد. این تابع را میتوان بهصورت تعاملی یا در اسکریپتPYTHONSTARTUPفراخوانی کرد. توجه داشته باشید که این تابع هیچ تضمینی برای پایداری ندارد و ممکن است تغییر کند یا حذف شود.(مشارکت Łukasz Langa در gh-131507.)
پوستهی interactive پیشفرض اکنون از تکمیل خودکار ایمپورت پشتیبانی میکند. این بدان معناست که با تایپ کردن
import coو فشار دادن کلید <Tab>، ماژولهایی که باcoشروع میشوند پیشنهاد میشوند. بهطور مشابه، با تایپ کردنfrom concurrent import i، زیرماژولهایconcurrentکه باiشروع میشوند پیشنهاد میشوند. توجه داشته باشید که تکمیل خودکار ویژگیهای ماژول در حال حاضر پشتیبانی نمیشود. (مشارکت Tomas Roun در gh-69605.)
ماژولهای جدید¶
annotationlib: برای دروننگری حاشیهنویسیها. برای جزئیات بیشتر به PEP 749 مراجعه کنید. (مشارکتشده توسط Jelle Zijlstra در gh-119180.)compression(شاملcompression.zstd): بستهای برای ماژولهای مرتبط با فشردهسازی، از جمله ماژول جدیدی برای پشتیبانی از قالب فشردهسازی Zstandard. برای جزئیات بیشتر به PEP 784 مراجعه کنید. (با مشارکت Emma Harper Smith، Adam Turner، Gregory P. Smith، Tomas Roun، Victor Stinner و Rogdham در gh-132983.)concurrent.interpreters: پشتیبانی از چندین مفسر در کتابخانه استاندارد. برای جزئیات بیشتر به PEP 734 مراجعه کنید. (مشارکتشده توسط Eric Snow در gh-134939.)string.templatelib: پشتیبانی از رشتههای لفظی قالبی (تیاسترینگها). برای جزئیات بیشتر به PEP 750 مراجعه کنید. (مشارکتشده توسط Jim Baker، Guido van Rossum، Paul Everitt، Koudai Aono، Lysandros Nikolaou، Dave Peck، Adam Turner، Jelle Zijlstra، Bénédikt Tran و Pablo Galindo Salgado در gh-132661.)
ماژولهای بهبودیافته¶
argparse¶
مقدار پیشفرض نام برنامه برای
argparse.ArgumentParserاکنون نحوهی دستور دادهشده به مفسر پایتون برای یافتن کد ماژول__main__را بازتاب میدهد. (مشارکتشده توسط Serhiy Storchaka و Alyssa Coghlan در gh-66436.)پارامتر اختیاری suggest_on_error در
argparse.ArgumentParserمعرفی شد که در صورت اشتباه تایپی از سوی کاربر، پیشنهادهایی برای گزینههای آرگومان و نامهای زیرپارسر ارائه میدهد. (مشارکتشده توسط Savannah Ostrowski در gh-124456.)فعالسازی رنگ برای متن راهنما، که میتوان آن را با پارامتر اختیاری color در
argparse.ArgumentParserغیرفعال کرد. این قابلیت را میتوان از طریق متغیرهای محیطی نیز کنترل کرد. (مشارکتشده توسط هوگو ون کمِناده در gh-130645.)
ast¶
افزودن
compare()، تابعی برای مقایسهی دو AST. (با مشارکت Batuhan Taskaya و Jeremy Hylton در gh-60191.)افزودن پشتیبانی از
copy.replace()برای گرههای AST. (مشارکت Bénédikt Tran در gh-121141.)رشتههای مستند اکنون در سطح بهینهسازی ۲ از یک AST بهینهشده حذف میشوند. (مشارکتشده توسط Irit Katriel در gh-123958.)
خروجی
repr()برای گرههای AST اکنون شامل اطلاعات بیشتری است. (مشارکت: Tomas Roun در gh-116022.)هنگامی که با یک درخت سینتکس انتزاعی (AST) بهعنوان ورودی فراخوانی شود، تابع
parse()اکنون همیشه بررسی میکند که نوع گره ریشه مناسب باشد. (ارائهشده توسط Irit Katriel در gh-130139.)افزودن گزینههای جدید به رابط خط فرمان:
--feature-version،--optimizeو--show-empty. (مشارکتشده توسط Semyon Moroz در gh-133367.)
asyncio¶
تابع و متدهایی که
create_task()نام دارند، اکنون فهرست دلخواهی از آرگومانهای کلیدواژهای را میپذیرند. تمام آرگومانهای کلیدواژهای به سازندهیTaskیا کارخانه وظیفه سفارشی منتقل میشوند. (برای جزئیات بهset_task_factory()مراجعه کنید.) آرگومانهای کلیدواژهایnameوcontextدیگر ویژه نیستند؛ نام باید اکنون با استفاده از آرگومان کلیدواژهایnameکارخانه تنظیم شود وcontextمیتواندNoneباشد.این بر تابع و متدهای زیر تأثیر میگذارد:
asyncio.create_task()،asyncio.loop.create_task()،asyncio.TaskGroup.create_task().(با مشارکت Thomas Grainger در gh-128307.)
دو تابع کاربردی جدید برای دروننگری و چاپ گراف فراخوانی یک برنامه وجود دارد:
capture_call_graph()وprint_call_graph(). برای جزئیات بیشتر به قابلیتهای دروننگری Asyncio مراجعه کنید. (مشارکتشده توسط Yury Selivanov، Pablo Galindo Salgado و Łukasz Langa در gh-91048.)
calendar¶
بهطور پیشفرض، تاریخ امروز در خروجی متنی خط فرمان ماژول
calendarبا رنگ برجسته میشود. این را میتوان با متغیرهای محیطی کنترل کرد. (مشارکتشده توسط هوگو ون کمِناده در gh-128317.)
concurrent.futures¶
کلاس اجراکنندهی جدیدی،
InterpreterPoolExecutor، اضافه شده است که چندین مفسر پایتون را در یک فرایند واحد («زیرمفسرها» — subinterpreters) برای کد پایتون در دسترس قرار میدهد. این کلاس از یک استخر مفسرهای مستقل پایتون برای اجرای فراخوانیها بهصورت ناهمگام استفاده میکند.این مورد جدا از ماژول جدید
interpretersاست که توسط PEP 734 معرفیشده است. (مشارکتشده توسط Eric Snow در gh-124548.)
در پلتفرمهای یونیکس بهجز macOS، 'forkserver' اکنون متد شروع پیشفرض برای
ProcessPoolExecutorاست (جایگزین 'fork' شده است). این تغییر بر Windows یا macOS تأثیری نمیگذارد و در آنها 'spawn' همچنان متد شروع پیشفرض است.اگر روش fork که با نخبندی ناسازگار است مورد نیاز باشد، باید آن را بهطور صریح با فراهمکردن یک زمینهی multiprocessing به نام mp_context برای
ProcessPoolExecutorدرخواست کنید.برای اطلاعات و تفاوتهای آن با روش فورک و همچنین برای آگاهی از اینکه این تغییر چگونه ممکن است بر کدهای موجود با متغیرهای سراسری اشتراکی تغییرپذیر و/یا اشیاء اشتراکیای که نمیتوان بهطور خودکار آنها را
پیکلکرد تأثیر بگذارد، به محدودیتهای forkserver مراجعه کنید.(مشارکتشده توسط Gregory P. Smith در gh-84559.)
دو متد جدید به
ProcessPoolExecutorاضافه شد:terminate_workers()وkill_workers()، بهعنوان راههایی برای خاتمه دادن یا کشتن همهی فرایندهای کارگر زنده در استخر دادهشده. (مشارکتشده توسط Charles Machalow در gh-130849.)افزودن پارامتر اختیاری buffersize به
Executor.mapبرای محدود کردن تعداد وظایف ارسالشدهای که نتایجشان هنوز تولید نشده است. اگر بافر پر باشد، پیمایش روی iterables مکث میکند تا زمانی که نتیجهای از بافر تولید شود. (مشارکتشده توسط انزو بونال و جاش روزنبرگ در gh-74028.)
configparser¶
برای بهبود امنیت،
configparserدیگر پروندههای پیکربندیای را که نمیتواند بخواند، نمینویسد. تلاش برایwrite()کردن کلیدهایی که شامل جداکنندهها هستند یا با الگوی سرآیند بخش آغاز میشوند، باعث ایجاد استثنایInvalidWriteErrorمیشود. (مشارکتشده توسط Jacob Lincoln در gh-129270.)
contextvars¶
پشتیبانی از پروتکل مدیر زمینه برای اشیای
Token. (با مشارکت Andrew Svetlov در gh-129889.)
ctypes¶
چیدمان فیلدهای بیتی در اشیاء
StructureوUnionاکنون تطابق نزدیکتری با پیشفرضهای پلتفرم (GCC/Clang یا MSVC) دارد. بهویژه، فیلدها دیگر همپوشانی ندارند. (با مشارکت Matthias Görgens در gh-97702.)اکنون میتوان ویژگی کلاس
Structure._layout_را برای کمک به تطبیق با رابط دودویی برنامه (ABI) غیرپیشفرض تنظیم کرد. (مشارکتشده توسط Petr Viktorin در gh-97702.)کلاس توصیفگرهای فیلد
Structure/Unionاکنون بهصورتCFieldدر دسترس است و ویژگیهای جدیدی برای کمک به اشکالزدایی و دروننگری درونی دارد. (مشارکتشده توسط Petr Viktorin در gh-128715.)در ویندوز، استثنای
COMErrorاکنون عمومی است. (مشارکتشده توسط Jun Komoda در gh-126686.)در ویندوز، تابع
CopyComPointer()اکنون عمومی است. (مشارکتشده توسط Jun Komoda در gh-127275.)افزودن
memoryview_at()، تابعی برای ایجاد شیءmemoryviewکه به اشارهگر و طول ارائهشده ارجاع میدهد. این تابع مانندctypes.string_at()کار میکند، با این تفاوت که از رونوشت بافر اجتناب میکند و بهطور معمول هنگام پیادهسازی توابع کالبک پایتون خالصی که بافرهای با اندازهی پویا به آنها ارسال میشود، مفید است. (مشارکتشده توسط Rian Hunter در gh-112018.)در صورتی که هم کامپایلر و هم کتابخانهی
libffiاز نوعهای مختلط C پشتیبانی کنند، نوعهای مختلطc_float_complex،c_double_complexوc_longdouble_complexاکنون در دسترس هستند. (با مشارکتِ Sergey B Kirpichev در gh-61103.)افزودن
ctypes.util.dllist()برای فهرست کردن کتابخانههای اشتراکی بارگذاریشده توسط فرایند جاری. (مشارکتشده توسط Brian Ward در gh-119349.)نهانگاه نوعهای
ctypes.POINTER()از یک نهانگاه داخلی سراسری (_pointer_type_cache) به ویژگی_CData.__pointer_type__نوعهای متناظرctypesمنتقل شد. این کار در برخی موقعیتها مانع از رشد بیکران نهانگاه میشود. (مشارکتشده توسط سرگئی میریانوف در gh-100926.)نوع
py_objectاکنون از زیرنویسی پشتیبانی میکند و در نتیجه به یک نوع عام تبدیل میشود. (با مشارکت Brian Schubert در gh-132168.)ctypesاکنون از ساختهای نخبندی آزاد پشتیبانی میکند. (مشارکتشده توسط Kumar Aditya و Peter Bierma در gh-127945.)
curses¶
تابع
assume_default_colors()اضافه شد؛ پالایشی از تابعuse_default_colors()که امکان تغییر جفت رنگ0را فراهم میکند. (مشارکت Serhiy Storchaka در gh-133139.)
datetime¶
افزودن متد
strptime()به کلاسهایdatetime.dateوdatetime.time. (مشارکتشده توسط Wannes Boeykens در gh-41431.)
decimal¶
افزودن
Decimal.from_number()بهعنوان سازندهای جایگزین برایDecimal. (با مشارکت سرهی استورچاکا در gh-121798.)افشای
IEEEContext()برای پشتیبانی از ایجاد زمینههای متناظر با قالبهای تبادلی اعشاری IEEE 754 (2008). (مشارکتشده توسط Sergey B Kirpichev در gh-53032.)
difflib¶
dis¶
پشتیبانی از نمایش اطلاعات کامل مکان
دستورالعملهادر کد منبع، بهجای فقط شماره سطر، اضافه شد. این قابلیت از طریق آرگومان کلیدواژهای show_positions به رابطهای زیر اضافه شده است:این قابلیت همچنین از طریق
dis --show-positionsدر دسترس است. (مشارکتشده توسط Bénédikt Tran در gh-123165.)افزودن گزینهی خط فرمان
dis --specializedبرای نمایش بایتکد تخصصیشده. (مشارکتشده توسط Bénédikt Tran در gh-127413.)
errno¶
faulthandler¶
پشتیبانی از چاپ ردگیری پشتهی C روی سیستمهایی که از آن پشتیبانی میکنند، از طریق تابع جدید
dump_c_stack()یا از طریق آرگومان c_stack درfaulthandler.enable()اضافه شد. (با مشارکت Peter Bierma در gh-127604.)
fnmatch¶
افزودن
filterfalse()، تابعی برای رد کردن نامهایی که با الگوی دادهشده مطابقت دارند. (مشارکتشده توسط Bénédikt Tran در gh-74598.)
fractions¶
اکنون میتوان یک شیء
Fractionرا از هر شیء دارای متدas_integer_ratio()ساخت. (مشارکتشده توسط Serhiy Storchaka در gh-82017.)افزودن
Fraction.from_number()بهعنوان سازندهای جایگزین برایFraction. (ارائهشده توسط Serhiy Storchaka در gh-121797.)
functools¶
افزودن نشانگر
Placeholder. از این نشانگر میتوان همراه با توابعpartial()یاpartialmethod()استفاده کرد تا مکانی برای آرگومانهای جایگاهی در شیء پارشیال (partial) بازگرداندهشده رزرو شود. (مشارکتشده توسط Dominykas Grigonis در gh-119127.)پارامتر initial تابع
reduce()اکنون میتواند بهصورت آرگومان کلیدواژهای ارسال شود. (مشارکت Sayandip Dutta در gh-125916.)
getopt¶
getpass¶
graphlib¶
اجازه میدهد
TopologicalSorter.prepare()بیش از یک بار فراخوانی شود، تا زمانی که مرتبسازی آغاز نشده باشد. (مشارکت از Daniel Pope در gh-130914.)
heapq¶
ماژول
heapqاز طریق توابع جدید زیر، پشتیبانی بهبودیافتهای برای کار با هیپهای بیشینه ارائه میدهد:
hmac¶
http¶
فهرستهای پوشه و صفحات خطای تولیدشده توسط ماژول
http.serverبه مرورگر اجازه میدهند حالت تاریک پیشفرض خود را اعمال کند. (مشارکتشده توسط Yorik Hansen در gh-123430.)ماژول
http.serverاکنون از سرویسدهی از طریق HTTPS با استفاده از کلاسhttp.server.HTTPSServerپشتیبانی میکند. رابط خط فرمان (python -m http.server) این قابلیت را از طریق گزینههای زیر در دسترس قرار میدهد:--tls-cert <path>: مسیر پرونده گواهی TLS.--tls-key <path>: مسیر اختیاری به پروندهی کلید خصوصی.--tls-password-file <path>: مسیر اختیاری به پرونده گذرواژه برای کلید خصوصی.
(مشارکتشده توسط Semyon Moroz در gh-85162.)
imaplib¶
افزودن
IMAP4.idle()، که فرمانIDLEدر IMAP4 را همانطور که در RFC 2177 تعریف شده است پیادهسازی میکند. (مشارکت Forest در gh-55454.)
inspect¶
signature()یک آرگومان جدید با نام annotation_format میگیرد تاannotationlib.Formatمورد استفاده برای بازنمایی حاشیهنویسیها را کنترل کند. (مشارکتشده توسط Jelle Zijlstra در gh-101552.)Signature.format()آرگومان جدید unquote_annotations را میپذیرد. اگر درست باشد، حاشیهنویسیهای رشتهای بدون علامتهای نقلقول اطراف نمایش داده میشوند. (مشارکتشده توسط Jelle Zijlstra در gh-101552.)تابع
ispackage()برای تعیین اینکه آیا یک شیء package است یا خیر، افزوده شد. (مشارکتشده توسط Zhikang Yan در gh-125634.)
io¶
خواندن متن از یک جریان غیرمسدودکننده با
readممکن است اکنون در صورتی که عملیات نتواند بلافاصله بایتها را بازگرداند،BlockingIOErrorایجاد کند. (مشارکتشده توسط Giovanni Siragusa در gh-109523.)پروتکلهای
ReaderوWriterبهعنوان جایگزینهای سادهتری برای شبهپروتکلهایtyping.IO،typing.TextIOوtyping.BinaryIOافزوده شدند. (مشارکتشده توسط سباستین ریتائو در gh-127648.)
json¶
افزودن یادداشتهای استثنا برای خطاهای سریالسازی JSON که امکان شناسایی منشأ خطا را فراهم میکنند. (مشارکتشده توسط Serhiy Storchaka در gh-122163.)
امکان استفاده از ماژول
jsonبهعنوان اسکریپت از طریق سوییچ-mفراهم شد: python -m json. این روش اکنون بر python -m json.tool ترجیح دارد، که منسوخ نرم است. مستندات رابط خط فرمان JSON را ببینید. (مشارکت از سوی Trey Hunner در gh-122873.)بهطور پیشفرض، خروجی رابط خط فرمان JSON بهصورت رنگی برجستهسازی میشود. این امر را میتوان با متغیرهای محیطی کنترل کرد. (مشارکتشده توسط Tomas Roun در gh-131952.)
linecache¶
logging.handlers¶
اشیاء
QueueListenerاکنون از پروتکل مدیر زمینه پشتیبانی میکنند. (مشارکتشده توسط Charles Machalow در gh-132106.)QueueListener.startاکنون اگر شنونده از پیش راهاندازی شده باشد، یکRuntimeErrorایجاد میکند. (نوشتهی Charles Machalow در gh-132106.)
math¶
پیامهای خطای مفصلتری برای خطاهای دامنه در ماژول اضافه شد. (با مشارکت Charlie Zhao و Sergey B Kirpichev در gh-101410.)
mimetypes¶
افزودن یک خط فرمان عمومی برای ماژول، که از طریق python -m mimetypes فراخوانی میشود. (مشارکتشده توسط Oleg Iarygin و Hugo van Kemenade در gh-93096.)
افزودن چندین نوع MIME جدید بر اساس RFCها و کاربرد رایج:
انواع MIME برای فونتها از مایکروسافت و RFC 8081
اوپنتایپ تعبیهشده (Embedded OpenType):
application/vnd.ms-fontobjectOpenType Layout (OTF)
font/otfTrueType:
font/ttfWOFF 1.0
font/woffWOFF 2.0
font/woff2
RFC 9559 انواع MIME برای ساختارهای ظرف دادههای دیداریشنیداری Matroska
صدا بدون ویدیو:
audio/matroska(.mka)ویدیو:
video/matroska(.mkv)ویدئوی استریوسکوپی:
video/matroska-3d(.mk3d)
تصاویر دارای RFCها
RFC 1494: CCITT Group 3 (
.g3)RFC 3362: فکس بلادرنگ، T.38 (
.t38)RFC 3745: JPEG 2000 (
.jp2)، توسعهیافته (.jpx) و ترکیبی (.jpm)RFC 3950: Tag Image File Format Fax eXtended, TIFF-FX (
.tfx)RFC 4047: سامانه انتقال تصویر انعطافپذیر (Flexible Image Transport System) (
.fits)RFC 7903: فراپروندهی پیشرفته (Enhanced Metafile) (
.emf) و فراپروندهی ویندوز (Windows Metafile) (.wmf)
سایر افزودهها و تغییرات نوع MIME
RFC 2361: تغییر نوع برای
.aviبهvideo/vnd.aviو برای.wavبهaudio/vnd.waveRFC 4337: افزودن MPEG-4
audio/mp4(.m4a)RFC 5334: افزودن رسانهی Ogg (
.oga،.oggو.ogx)RFC 6713: افزودن gzip
application/gzip(.gz)RFC 9639: افزودن FLAC
audio/flac(.flac)RFC 9512 نوع MIME
application/yamlبرای پروندههای YAML (.yamlو.yml)افزودن 7z
application/x-7z-compressed(.7z)افزودن بسته اندروید
application/vnd.android.package-archive(.apk) زمانی که strict نباشدافزودن deb
application/x-debian-package(.deb)افزودن glTF دودویی
model/gltf-binary(.glb)افزودن glTF JSON/ASCII
model/gltf+json(.gltf)افزودن M4V
video/x-m4v(.m4v)افزودن PHP
application/x-httpd-php(.php)افزودن RAR
application/vnd.rar(.rar)افزودن RPM
application/x-rpm(.rpm)افزودن STL
model/stl(.stl)افزودن Windows Media Video با نوع
video/x-ms-wmv(.wmv)دفاکتو (De facto): افزودن WebM
audio/webm(.weba)ECMA-376: افزودن نوعهای
.docx،.pptxو.xlsxOASIS: افزودن نوعهای OpenDocument
.odg،.odp،.odsو.odtW3C: افزودن EPUB
application/epub+zip(.epub)
(با مشارکت Sahil Prajapati و Hugo van Kemenade در gh-84852، Sasha "Nelie" Chernykh و Hugo van Kemenade در gh-132056، و Hugo van Kemenade در gh-89416، gh-85957 و gh-129965.)
multiprocessing¶
در پلتفرمهای یونیکس بهجز macOS، 'forkserver' اکنون روش شروع پیشفرض است (جایگزین 'fork'). این تغییر بر ویندوز یا macOS تأثیری نمیگذارد؛ در آنها 'spawn' همچنان روش شروع پیشفرض است.
اگر روش fork ناسازگار با نخبندی مورد نیاز است، باید آن را بهطور صریح از طریق زمینهای از
get_context()(ترجیحی) درخواست کنید یا پیشفرض را از طریقset_start_method()تغییر دهید.برای اطلاعات و تفاوتهای آن با روش فورک و همچنین برای آگاهی از اینکه این تغییر چگونه ممکن است بر کدهای موجود با متغیرهای سراسری اشتراکی تغییرپذیر و/یا اشیاء اشتراکیای که نمیتوان بهطور خودکار آنها را
پیکلکرد تأثیر بگذارد، به محدودیتهای forkserver مراجعه کنید.(مشارکتشده توسط Gregory P. Smith در gh-84559.)
روش شروع
'forkserver'درmultiprocessingاکنون سوکت کنترل خود را احراز هویت میکند تا برای محدود کردن اینکه کدام فرایندهای دیگر میتوانند باعث شوند سرور انشعاب (forkserver) کارگرها را ایجاد کند و کد اجرا کند، صرفاً به مجوزهای سامانه فایلبندی متکی نباشد. (مشارکتشده توسط Gregory P. Smith برای gh-97514.)اشیاء پراکسی multiprocessing برای انواع list و dict، متدهای مفقودی را که پیشتر نادیده گرفتهشده بودند به دست میآورند:
clear()وcopy()برای پراکسیهایlistfromkeys()،reversed(d)،d | {}،{} | d،d |= {'b': 2}برای پراکسیهایdict
(مشارکتی از Roy Hyunjin Han برای gh-103134.)
پشتیبانی از اشیای
setمشترک از طریقSyncManager.set()اضافه شد. متدset()درManager()اکنون در دسترس است. (مشارکتشده توسط Mingyu Park در gh-129949.)افزودن متد
interrupt()به اشیاءmultiprocessing.Process، که فرایند فرزند را با ارسالSIGINTخاتمه میدهد. این کار به بندهایfinallyامکان میدهد تا ردگیری پشتهای برای فرایند خاتمهیافته چاپ کنند. (مشارکتشده توسط آرتم پولکین در gh-131913.)
operator¶
افزودن
is_none()وis_not_none()بهعنوان یک جفت تابع، بهگونهای کهoperator.is_none(obj)معادلobj is Noneوoperator.is_not_none(obj)معادلobj is not Noneباشد. (مشارکت Raymond Hettinger و Nico Mexis در gh-115808.)
os¶
تابع
reload_environ()اضافه شد تاos.environوos.environbرا با تغییرات اعمالشده در محیط توسطos.putenv()یاos.unsetenv()، یا با تغییراتی که خارج از پایتون در همان فرایند ایجاد شدهاند، بهروزرسانی کند. (مشارکتشده توسط Victor Stinner در gh-120057.)ثابتهای
SCHED_DEADLINEوSCHED_NORMALبه ماژولosافزوده شدند. (با مشارکت James Roy در gh-127688.)تابع
readinto()برای خواندن درون یک شیء بافر از یک توصیفگر پرونده افزوده شد. (مشارکت کودی مالونی در gh-129205.)
os.path¶
پارامتر strict در
realpath()مقدار جدیدی به نامALLOW_MISSINGرا میپذیرد. در صورت استفاده، خطاهایی غیر ازFileNotFoundErrorدوباره ایجاد خواهند شد؛ مسیر حاصل میتواند وجود نداشته باشد، اما فاقد پیوندهای نمادین خواهد بود. (مشارکتشده توسط Petr Viktorin برای CVE 2025-4517.)
pathlib¶
افزودن متدهایی به
pathlib.Pathبرای کپی یا انتقال بازگشتی پروندهها و پوشهها:copy()یک پرونده یا درخت پوشه را به مقصد کپی میکند.copy_into()به داخلِ یک پوشهی مقصد کپی میکند.move()یک پرونده یا درخت پوشه را به مقصد منتقل میکند.متد
move_into()به درون پوشهی مقصد منتقل میکند.
(مشارکت Barney Gale در gh-73991.)
ویژگی
infoافزوده شد که شیءای را ذخیره میکند که پروتکل جدیدpathlib.types.PathInfoرا پیادهسازی میکند. این شیء از پرسوجوی نوع پرونده و نهانگاهسازی داخلی نتایجstat()پشتیبانی میکند. اشیاء Path تولیدشده توسطiterdir()با اطلاعات نوع پروندهی حاصل از پویش پوشه والد، مقداردهی اولیه میشوند. (مشارکتشده توسط Barney Gale در gh-125413.)
pdb¶
ماژول
pdbاکنون از اتصال از راه دور به یک فرایند پایتون در حال اجرا با استفاده از گزینهی جدید خط فرمان-p PIDپشتیبانی میکند:python -m pdb -p 1234
این کار به فرایند پایتون با PID دادهشده متصل میشود و به شما امکان میدهد آن را بهصورت تعاملی اشکالزدایی کنید. توجه داشته باشید که به دلیل نحوهی کار مفسر پایتون، اتصال به یک فرایند از راه دور که در یک فراخوانی سیستمی مسدود شده یا در انتظار ورودی/خروجی است، تنها زمانی کار میکند که دستور بایتکد بعدی اجرا شود یا فرایند سیگنالی دریافت کند.
این قابلیت از PEP 768 و تابع جدید
sys.remote_exec()برای اتصال به فرایند از راه دور و ارسال دستورهای PDB به آن استفاده میکند.(مشارکتشده توسط Matt Wozniski و Pablo Galindo در gh-131591.)
نقاط توقف ثابت (hardcoded) (
breakpoint()وset_trace()) اکنون بهجای اینکه هر بار نمونهی جدیدی ایجاد کنند، از آخرین نمونهیPdbکهset_trace()را فراخوانی میکند، دوباره استفاده میکنند. در نتیجه، تمام دادههای مخصوص نمونه مانندdisplayوcommandsبین نقاط توقف ثابت حفظ میشوند. (مشارکتشده توسط Tian Gao در gh-121450.)آرگومان جدید mode به
pdb.Pdbاضافه شد. دستورrestartهنگامی کهpdbدر حالتinlineباشد، غیرفعال میشود. (مشارکتشده توسط Tian Gao در gh-123757.)وقتی کاربر بخواهد از
pdbدر حالتinlineخارج شود، یک اعلان تأیید نمایش داده میشود.y،Y،<Enter>یاEOFخروج را تأیید کرده و به جای برخاستن استثنایbdb.BdbQuit،sys.exit()را فراخوانی میکنند. (مشارکتشده توسط Tian Gao در gh-124704.)نقطههای توقف درونخطی مانند
breakpoint()یاpdb.set_trace()همیشه برنامه را در فریم فراخوانی متوقف میکنند و الگویskip(در صورت وجود) را نادیده میگیرند. (با مشارکت Tian Gao در gh-130493.)<tab>در ابتدای سطر در ورودی چندسطریpdbاکنون بهجای درج نویسهی\t، یک تورفتگی ۴ فاصلهای ایجاد میکند. (مشارکتشده توسط Tian Gao در gh-130471.)قابلیت تورفتگی خودکار در ورودی چندسطری
pdbمعرفی شد. این قابلیت یا تورفتگی سطر آخر را حفظ میکند، یا هنگامی که بلوک کد جدیدی را تشخیص میدهد، تورفتگی ۴ فاصلهای درج میکند. (با مشارکت Tian Gao در gh-133350.)$_asynctaskبرای دسترسی به وظیفهی جاری asyncio (در صورت وجود) افزوده شد. (مشارکت Tian Gao در gh-124367.)pdb.set_trace_async()برای پشتیبانی از اشکالزدایی همروالهای asyncio اضافه شده است. از دستورهایawaitبا این تابع پشتیبانی میشود. (مشارکتشده توسط Tian Gao در gh-132576.)کد منبع نمایشدادهشده در
pdbبا برجستهسازی سینتکس نمایش داده خواهد شد. این قابلیت را میتوان با همان روشهای مورد استفاده در پوستهی interactive پیشفرض و همچنین با آرگومانcolorizeکه بهتازگی بهpdb.Pdbافزوده شده است، کنترل کرد. (مشارکت Tian Gao و Łukasz Langa در gh-133355.)
pickle¶
نسخهی پیشفرض پروتکل در ماژول
pickleرا روی ۵ تنظیم میکند. برای جزئیات بیشتر، به پروتکلهای پیکل مراجعه کنید.افزودن یادداشتهای استثنا به خطاهای سریالسازی پیکل که امکان شناسایی منبع خطا را فراهم میکنند. (مشارکتشده توسط Serhiy Storchaka در gh-122213.)
platform¶
افزودن
invalidate_caches()، تابعی برای باطل کردن نتایج نهانگاهیشده در ماژولplatform. (مشارکتشده توسط Bénédikt Tran در gh-122549.)
pydoc¶
حاشیهنویسیها در خروجی راهنما اکنون معمولاً در قالبی نزدیکتر به قالب کد منبع اصلی نمایش داده میشوند. (مشارکتشده توسط Jelle Zijlstra در gh-101552.)
re¶
پشتیبانی از
\zبهعنوان مترادف\Zدرعبارتهای باقاعده. این الگو در بسیاری از موتورهای عبارت باقاعدهی دیگر بدون ابهام تفسیر میشود، برخلاف\Zکه رفتار آن تفاوتهای ظریفی دارد. (مشارکتشده توسط Serhiy Storchaka در gh-133306.)\Bدرعبارت باقاعدهاکنون با رشته ورودی خالی تطبیق میکند، به این معنا که اکنون همیشه عکس\bاست. (مشارکتشده توسط Serhiy Storchaka در gh-124130.)
socket¶
بهبود و اصلاح پشتیبانی از سوکتهای بلوتوث.
رفع اشکال پشتیبانی از سوکتهای بلوتوث در NetBSD و DragonFly BSD. (مشارکتشده توسط Serhiy Storchaka در gh-132429.)
اصلاح پشتیبانی از
BTPROTO_HCIدر FreeBSD. (مشارکتشده توسط Victor Stinner در gh-111178.)افزودن پشتیبانی از
BTPROTO_SCOدر FreeBSD. (مشارکتشده توسط Serhiy Storchaka در gh-85302.)افزودن پشتیبانی از cid و bdaddr_type در نشانی برای
BTPROTO_L2CAPدر FreeBSD. (با مشارکت Serhiy Storchaka در gh-132429.)افزودن پشتیبانی از channel در نشانی مربوط به
BTPROTO_HCIدر لینوکس. (مشارکتشده توسط Serhiy Storchaka در gh-70145.)پذیرش یک عدد صحیح بهعنوان نشانی برای
BTPROTO_HCIدر لینوکس. (مشارکتشده توسط Serhiy Storchaka در gh-132099.)برگرداندن cid در
getsockname()برایBTPROTO_L2CAP. (مشارکت Serhiy Storchaka در gh-132429.)ثابتهای جدید بسیاری افزوده شد. (مشارکتشده توسط Serhiy Storchaka در gh-132734.)
ssl¶
struct¶
symtable¶
sys¶
تابع ویژهی
sys.getobjects()که پیشتر مستند نشده بود و فقط در ساختهای خاص پایتون وجود دارد، اکنون ممکن است اشیاءی را از مفسرهایی غیر از مفسری که در آن فراخوانی میشود بازگرداند. (مشارکتشده توسط اریک اسنو در gh-125286.)تابع
sys._is_immortal()برای تعیین اینکه آیا یک شیء نامیرا است، افزوده شد. (مشارکتشده توسط Peter Bierma در gh-128509.)در FreeBSD،
sys.platformدیگر شامل شماره نسخهی اصلی نیست. همیشه'freebsd'است، بهجای'freebsd13'یا'freebsd14'. (مشارکتشده توسط Michael Osipov در gh-129393.)ایجاد
DeprecationWarningبرایsys._clear_type_cache(). این تابع در پایتون 3.13 منسوخ شد، اما هشدار رانتایم ایجاد نمیکرد.تابع
sys.remote_exec()برای پیادهسازی رابط اشکالزدای خارجی جدید افزوده شد. برای جزئیات به PEP 768 مراجعه کنید. (با مشارکت Pablo Galindo Salgado، Matt Wozniski و Ivona Stojanovic در gh-131591.)فضای نام
sys._jitافزوده شد که شامل ابزارهایی برای دروننگری کامپایل در لحظه است. (با مشارکت Brandt Bucher در gh-133231.)
sys.monitoring¶
دو رویداد نظارتی جدید،
BRANCH_LEFTوBRANCH_RIGHT، افزوده شدهاند. این دو رویداد جایگزین رویدادBRANCHشده و آن را منسوخ میکنند. (مشارکتشده توسط Mark Shannon در gh-122548.)Add
sys.monitoring.clear_tool_id()to unregister all events and callback functions associated with a tool identifier.sys.monitoring.free_tool_id()now calls it before releasing the tool identifier, instead of leaving its events and callbacks registered. (Contributed by Tian Gao in gh-116750.)
sysconfig¶
افزودن کلید
ABIFLAGSبهget_config_vars()در ویندوز. (مشارکتشده توسط Xuehai Pan در gh-131799.)
tarfile¶
data_filter()اکنون مقصد پیوندهای نمادین را نرمالسازی میکند تا از حملههای پیمایش مسیر (path traversal) جلوگیری شود. (مشارکتشده توسط Petr Viktorin در gh-127987 و CVE 2025-4138.)extractall()اکنون هنگامی که پوشهای حذفشده یا با نوع دیگری از پرونده جایگزینشده باشد، از اصلاح ویژگیهای پوشه صرفنظر میکند. (مشارکتشده توسط Petr Viktorin در gh-127987 و CVE 2024-12718.)extract()وextractall()اکنون هنگام جایگزین کردن پیوند (سخت یا نمادین) با کپی عضوی دیگر از آرشیو، و هنگام اصلاح ویژگیهای پوشه، فیلتر استخراج را (دوباره) اعمال میکنند. حالت اول استثنای جدیدی به نامLinkFallbackErrorایجاد میکند. (مشارکت از Petr Viktorin برای CVE 2025-4330 و CVE 2024-12718.)extract()وextractall()دیگر اعضای ردشده را هنگامی کهerrorlevel()صفر است، استخراج نمیکنند. (مشارکت توسط Matt Prodani و Petr Viktorin در gh-112887 و CVE 2025-4435.)
threading¶
threading.Thread.start()اکنون نام نخ سیستمعامل را برابر باthreading.Thread.nameتنظیم میکند. (با مشارکت Victor Stinner در gh-59705.)
tkinter¶
turtle¶
مدیرهای زمینه برای
turtle.fill()،turtle.poly()وturtle.no_animation()اضافه شدند. (با مشارکت Marie Roald و Yngve Mardal Moe در gh-126350.)
types¶
types.UnionTypeاکنون نام مستعری برایtyping.Unionاست. برای جزئیات بیشتر به زیر مراجعه کنید. (مشارکتشده توسط Jelle Zijlstra در gh-105499.)
typing¶
نوعهای
types.UnionTypeوtyping.Unionاکنون مستعار یکدیگر هستند، به این معنا که هم اجتماع (union) سبک قدیمی (ایجادشده باUnion[int, str]) و هم اجتماع سبک جدید (int | str) اکنون نمونههایی از همان نوع رانتایم ایجاد میکنند. این، رفتار میان دو سینتکس را یکپارچه میکند، اما به برخی تفاوتهای رفتاری منجر میشود که ممکن است بر کاربرانی که نوعها را در زمان اجرا دروننگری میکنند تأثیر بگذارد:هر دو سینتکس برای ایجاد اجتماع (union) اکنون در
repr()بازنمایی رشتهای یکسانی تولید میکنند. برای مثال،repr(Union[int, str])اکنون"int | str"است، بهجای"typing.Union[int, str]".اجتماعهایی (Union) که با سینتکس قدیمی ساخته میشوند، دیگر در نهانگاه ذخیره نمیشوند. پیش از این، اجرای
Union[int, str]به دفعات همان شیء را برمیگرداند (Union[int, str] is Union[int, str]برابرTrueبود)، اما اکنون دو شیء متفاوت برمیگرداند. برای مقایسهی یونیونها از نظر برابری، از==استفاده کنید، نهis. یونیونهای سبک جدید هرگز به این روش در نهانگاه ذخیره نشدهاند. این تغییر ممکن است مصرف حافظه را برای برخی برنامههایی که از تعداد زیادی یونیون ساختهشده از طریق زیرنویسیtyping.Unionاستفاده میکنند، افزایش دهد. با این حال، چندین عامل این هزینه را جبران میکنند: یونیونهای استفادهشده در حاشیهنویسیها به دلیل PEP 649 در پایتون 3.14 دیگر بهطور پیشفرض ارزیابی نمیشوند؛ یک نمونه ازtypes.UnionTypeخود بسیار کوچکتر از شیئی است کهUnion[]در نسخههای پیشین پایتون برمیگرداند؛ و حذف نهانگاه نیز مقداری صرفهجویی در فضا ایجاد میکند. بنابراین، بعید است که این تغییر برای اکثر کاربران باعث افزایش قابلتوجهی در مصرف حافظه شود.قبلاً، یونیونهای سبک قدیمی با استفاده از کلاس خصوصی
typing._UnionGenericAliasپیادهسازی میشدند. این کلاس دیگر برای پیادهسازی مورد نیاز نیست، اما برای سازگاری با نسخههای پیشین نگه داشته شده است و حذف آن برای پایتون 3.17 برنامهریزی شده است. کاربران باید بهجای اتکا به جزئیات پیادهسازی خصوصی، از ابزارهای کمکی مستند دروننگری مانندget_origin()وtyping.get_args()استفاده کنند.اکنون میتوان از خودِ
typing.Unionدر بررسیهایisinstance()استفاده کرد. برای مثال،isinstance(int | str, typing.Union)مقدارTrueرا برمیگرداند؛ پیشتر این کارTypeErrorایجاد میکرد.ویژگی
__args__از اشیاءtyping.Unionدیگر قابل نوشتن نیست.دیگر نمیتوان هیچ ویژگیای را روی اشیاء
Unionتنظیم کرد. این کار در نسخههای قبلی تنها برای ویژگیهای دندر (dunder) کار میکرد، هرگز مستند نشده بود که کار کند، و در بسیاری از موارد بهطور نامحسوس معیوب بود.
(مشارکتشده توسط Jelle Zijlstra در gh-105499.)
TypeAliasTypeاکنون از واگشایی ستارهای پشتیبانی میکند.
unicodedata¶
پایگاه داده یونیکد به یونیکد 16.0.0 بهروزرسانی شده است.
unittest¶
خروجی
unittestاکنون بهطور پیشفرض رنگی است. این را میتوان با متغیرهای محیطی کنترل کرد. (مشارکتشده توسط هوگو فان کمِناده در gh-127221.)قابلیت کشف unittest دوباره از بسته فضای نام بهعنوان پوشه شروع پشتیبانی میکند. این پشتیبانی در پایتون 3.11 حذف شده بود. (مشارکتشده توسط Jacob Walls در gh-80958.)
تعدادی متد جدید به کلاس
TestCaseاضافه شد که آزمونهای تخصصیتری فراهم میکنند.assertHasAttr()وassertNotHasAttr()بررسی میکنند که آیا شیء دارای ویژگی معینی است یا خیر.assertIsSubclass()وassertNotIsSubclass()بررسی میکنند که آیا شیء زیرکلاس یک کلاس خاص است یا زیرکلاس یکی از کلاسهای یک تاپل.assertStartsWith()،assertNotStartsWith()،assertEndsWith()وassertNotEndsWith()بررسی میکنند که آیا رشتهی یونیکد یا رشتهی بایت با رشتههای مشخصی شروع میشود یا به آنها پایان مییابد.
(مشارکتشده توسط Serhiy Storchaka در gh-71339.)
urllib¶
ارتقای الگوریتم احراز هویت دایجست HTTP برای
urllib.requestبا پشتیبانی از احراز هویت دایجست SHA-256 مطابق با مشخصات RFC 7616. (با مشارکت Calvin Bui در gh-128193.)بهبود ارگونومی و انطباق با استانداردها هنگام تجزیه و تولید نشانیهای
file:.در
url2pathname():پذیرفتن یک URL کامل هنگامی که آرگومان جدید require_scheme روی true تنظیم شود.
اگر بخش مرجعِ نشانیوب با نام میزبان محلی مطابقت دارد، آن را کنار بگذارید.
هنگامی که آرگومان جدید resolve_host برابر true تنظیم شده باشد، مرجع (authority) URL در صورت حل شدن به یک آدرس IP محلی حذف میشود.
اجزای کوئری و قطعه (fragment) در URL دور ریخته میشوند.
در صورتی که مرجع (authority) یک URL محلی نباشد،
URLErrorایجاد میشود؛ بهجز در ویندوز که مانند قبل یک مسیر UNC برمیگردانیم.
در
pathname2url():وقتی آرگومان جدید add_scheme برابر با true قرار گیرد، یک URL کامل برمیگرداند.
در صورتی که مسیر با اسلش آغاز شود، یک مرجع (authority) خالی در URL گنجانده میشود. برای مثال، مسیر
/etc/hostsبه URL///etc/hostsتبدیل میشود.
در ویندوز، حروف درایو دیگر به حروف بزرگ تبدیل نمیشوند و نویسههای
:که به دنبال حرف درایو نمیآیند، دیگر باعث ایجاد استثنایOSErrorنمیشوند.(مشارکت از Barney Gale در gh-125866.)
uuid¶
پشتیبانی از نسخههای 6، 7 و 8 UUID مطابق مشخصات RFC 9562، از طریق
uuid6()،uuid7()وuuid8()به ترتیب اضافه شد. (مشارکتشده توسط Bénédikt Tran در gh-89083.)NILوMAXاکنون برای نمایش قالبهای UUID تهی (Nil) و بیشینه (Max) مطابق تعریف RFC 9562 در دسترس هستند. (با مشارکت Nick Pope در gh-128427.)امکان تولید همزمان چندین UUID در خط فرمان از طریق
python -m uuid --countفراهم شد. (مشارکتشده توسط Simon Legner در gh-131236.)
webbrowser¶
نامها در متغیر محیطی
BROWSERاکنون میتوانند به مرورگرهای از پیش ثبتشده برای ماژولwebbrowserاشاره کنند، بهجای اینکه همیشه یک دستور مرورگر جدید تولید شود.این کار باعث میشود که بتوان
BROWSERرا به مقدار یکی از مرورگرهای پشتیبانیشده در macOS تنظیم کرد.
zipfile¶
متد
ZipInfo._for_archiveاضافه شد؛ متدی برای حل کردن پیشفرضهای مناسب برای شیءZipInfoهمانطور که توسطZipFile.writestrاستفاده میشود. (مشارکتشده توسط Bénédikt Tran در gh-123424.)ZipFile.writestr()اکنون برای پشتیبانی بهتر از ساختهای تکرارپذیر، متغیر محیطیSOURCE_DATE_EPOCHرا رعایت میکند. (مشارکتشده توسط Jiahao Li در gh-91279.)
بهینهسازیها¶
زمان ایمپورت چندین ماژول از کتابخانه استاندارد بهبود یافته است، از جمله
annotationlib،ast،asyncio،base64،cmd،csv،gettext،importlib.util،locale،mimetypes،optparse،pickle،pprint،pstats،shlex،socket،string،subprocess،threading،tomllib،typesوzipfile.(مشارکتکنندگان: Adam Turner، Bénédikt Tran، Chris Markiewicz، Eli Schwartz، Hugo van Kemenade، Jelle Zijlstra و دیگران در gh-118761.)
مفسر اکنون در مواردی که انجام این کار ایمن باشد، از برخی تغییرات شمارش ارجاع بهصورت داخلی اجتناب میکند. این میتواند باعث شود مقادیر بازگرداندهشده از
sys.getrefcount()وPy_REFCNT()در مقایسه با نسخههای قبلی پایتون متفاوت باشند. برای جزئیات به بخش زیر مراجعه کنید.
asyncio¶
نتایج بنچمارکهای استاندارد پس از پیادهسازی یک فهرست پیوندی دوطرفهی جدید به ازای هر نخ برای
وظیفههای بومی، به میزان ۱۰ تا ۲۰ درصد بهبود یافته و مصرف حافظه نیز کاهش یافته است. این امر به ابزارهای دروننگری خارجی مانند python -m asyncio pstree امکان میدهد گراف فراخوانی وظیفههای asyncio در حال اجرا در همهی نخها را دروننگری کنند. (مشارکت Kumar Aditya در gh-107803.)این ماژول اکنون پشتیبانی درجهیک از ساختهای نخآزاد دارد. این امر اجرای موازی چندین حلقه رویداد را در نخهای مختلف ممکن میسازد که بهطور خطی با تعداد نخها مقیاس میشود. (مشارکتشده توسط Kumar Aditya در gh-128002.)
base64¶
b16decode()اکنون تا شش برابر سریعتر شده است. (مشارکت Bénédikt Tran، Chris Markiewicz و Adam Turner در gh-118761.)
bdb¶
اشکالزدای پایه اکنون بکاندی مبتنی بر
sys.monitoringدارد که میتوان آن را با گذر دادن'monitoring'به پارامتر جدید backend کلاسBdbانتخاب کرد. (مشارکتشده توسط Tian Gao در gh-124533.)
difflib¶
تابع
IS_LINE_JUNK()اکنون تا دو برابر سریعتر شده است. (مشارکتشده توسط Adam Turner و Semyon Moroz در gh-130167.)
gc¶
از پایتون 3.14.5 به بعد:
پایتون 3.14.0 تا 3.14.4 با یک زبالهروب افزایشی جدید عرضه شد. با این حال، به دلیل تعدادی گزارش دربارهی فشار حافظهی قابلتوجه در محیطهای عملیاتی، آن به زبالهروب نسلمحور نسخهی 3.13 بازگردانده شد. این همان زبالهروب است که اکنون در پایتون 3.14.5 و پس از آن استفاده میشود.
پیشتر در پایتون 3.14.0-3.14.4:
زبالهروب افزایشی جدید به این معناست که بیشینهی زمانهای توقف برای هیپهای بزرگتر به اندازهی یک مرتبه بزرگی یا بیشتر کاهش مییابند.
به دلیل این بهینهسازی، معنای نتایج
get_threshold()وset_threshold()به همراهget_count()وget_stats()تغییر کرده است.برای سازگاری با نسخههای پیشین،
get_threshold()همچنان یک تاپل سهعضوی برمیگرداند. مقدار اول، مانند پیش، آستانهی گردآوریهای جوان است؛ مقدار دوم نرخی را تعیین میکند که گردآوری قدیمی با آن پویش میشود (مقدار پیشفرض ۱۰ است و مقادیر بالاتر به این معناست که گردآوری قدیمی کندتر پویش میشود). مقدار سوم اکنون بیمعناست و همیشه صفر است.set_threshold()اکنون هر آیتمی را پس از آیتم دوم نادیده میگیرد.get_count()وget_stats()همچنان همان قالب نتایج را برمیگردانند. تنها تفاوت این است که بهجای آنکه نتایج به نسلهای جوان، در حال پیر شدن و پیر اشاره کنند، نتایج به نسل جوان و فضاهای پیر شدن و جمعآوری نسل پیر اشاره میکنند.
خلاصه اینکه، کدی که سعی میکرد رفتار زبالهروب چرخهای (cycle GC) را دستکاری کند، ممکن است دقیقاً مطابق منظور کار نکند، اما به احتمال بسیار زیاد مضر نخواهد بود. تمام کدهای دیگر بدون هیچ مشکلی کار خواهند کرد.
(مشارکت Mark Shannon در gh-108362.)
io¶
pathlib¶
Path.read_bytesاکنون از حالت بدون بافر برای باز کردن پروندهها استفاده میکند، که خواندن کامل آنها را بین ۹٪ تا ۱۷٪ سریعتر میکند. (مشارکتشده توسط کودی مالونی در gh-120754.)
pdb¶
اکنون
pdbاز دو بکاند پشتیبانی میکند که مبتنی برsys.settrace()یاsys.monitoringهستند. استفاده از رابط خط فرمان pdb یاbreakpoint()همیشه بکاندsys.monitoringرا به کار خواهد برد. نمونهسازی صریح ازpdb.Pdbو کلاسهای مشتقشدهی آن بهصورت پیشفرض از بکاندsys.settrace()استفاده خواهد کرد که قابل پیکربندی است. (مشارکتشده توسط Tian Gao در gh-124533.)
textwrap¶
تابع
dedent()بهینهسازی شد و عملکرد آن بهطور میانگین ۲٫۴ برابر بهبود یافت، با بهبودهای بزرگتر برای ورودیهای بزرگتر، و اشکالی در نرمالسازی ناقص سطرهای خالی که نویسههای فضای سفید بهجز فاصله و تب دارند، رفع شد.
uuid¶
uuid3()وuuid5()اکنون هر دو برای نامهای ۱۶ بایتی تقریباً ۴۰٪ سریعتر و برای نامهای ۱۰۲۴ بایتی ۲۰٪ سریعتر هستند. کارایی برای نامهای طولانیتر بدون تغییر باقی میماند. (مشارکتشده توسط Bénédikt Tran در gh-128150.)uuid4()اکنون حدود ۳۰٪ سریعتر شده است. (مشارکتشده توسط Bénédikt Tran در gh-128150.)
zlib¶
در ویندوز، zlib-ng اکنون بهعنوان پیادهسازی ماژول
zlibدر دودوییهای پیشفرض استفاده میشود. هیچ ناسازگاری شناختهشدهای بینzlib-ngو پیادهسازی قبلیzlibوجود ندارد. این امر باید به عملکرد بهتری در تمام سطوح فشردهسازی منجر شود.شایان ذکر است که
zlib.Z_BEST_SPEED(1) ممکن است نسبت به پیادهسازی قبلی به فشردهسازی بهمراتب کمتری منجر شود، در حالی که زمان فشردهسازی را نیز بهطور چشمگیری کاهش میدهد.(مشارکت Steve Dower در gh-91349.)
حذفشده¶
argparse¶
پارامترهای type، choices و metavar از
BooleanOptionalActionحذف شدند. این پارامترها از پایتون 3.12 منسوخ شدهاند. (مشارکت نیکیتا سوبولف در gh-118805.)فراخوانی
add_argument_group()روی یک گروه آرگومان اکنون استثنایValueErrorایجاد میکند. بهطور مشابه،add_argument_group()یاadd_mutually_exclusive_group()روی یک گروه انحصار متقابل اکنون هر دو استثنایValueErrorایجاد میکنند. این «تودرتوسازی» هرگز پشتیبانی نمیشد، اغلب بهدرستی کار نمیکرد و بهطور ناخواسته از طریق وراثت در دسترس قرار گرفته بود. این قابلیت از Python 3.11 منسوخ شده است. (مشارکتشده توسط Savannah Ostrowski در gh-127186.)
ast¶
کلاسهای زیر، که از پایتون 3.8 نامهای مستعار منسوخِ
Constantبودهاند و از پایتون 3.12 هشدارهای منسوخسازی صادر کردهاند، حذف شدند:BytesEllipsisNameConstantNumStr
در نتیجهی این حذفها، متدهای
visit_Num،visit_Str،visit_Bytes،visit_NameConstantوvisit_Ellipsisکه توسط کاربر روی زیرکلاسهای سفارشیNodeVisitorتعریف شدهاند، دیگر هنگام پیمایش یک AST توسط زیرکلاسNodeVisitorفراخوانی نمیشوند. به جای آن، یک متدvisit_Constantتعریف کنید.(مشارکت الکس ویگود در gh-119562.)
پراپرتیهای منسوخ زیر روی
ast.Constantحذف شدند؛ این پراپرتیها برای سازگاری با کلاسهای AST که اکنون حذف شدهاند، وجود داشتند:Constant.nConstant.s
به جای آن از
Constant.valueاستفاده کنید. (مشارکتشده توسط Alex Waygood در gh-119562.)
asyncio¶
کلاسها، متدها و توابع زیر که از پایتون 3.12 منسوخ شده بودند، حذف شدند:
AbstractChildWatcherFastChildWatcherMultiLoopChildWatcherPidfdChildWatcherSafeChildWatcherThreadedChildWatcherAbstractEventLoopPolicy.get_child_watcher()AbstractEventLoopPolicy.set_child_watcher()get_child_watcher()set_child_watcher()
(مشارکتشده توسط Kumar Aditya در gh-120804.)
asyncio.get_event_loop()اکنون در صورت نبود حلقه رویداد فعلی، استثنایRuntimeErrorرا پرتاب میکند و دیگر بهطور ضمنی حلقه رویداد ایجاد نمیکند.(مشارکت Kumar Aditya در gh-126353.)
چند الگو وجود دارد که از
asyncio.get_event_loop()استفاده میکنند و بیشتر آنها را میتوان باasyncio.run()جایگزین کرد.اگر در حال اجرای یک تابع ناهمگام هستید، به سادگی از
asyncio.run()استفاده کنید.پیش از:
async def main(): ... loop = asyncio.get_event_loop() try: loop.run_until_complete(main()) finally: loop.close()
پس از:
async def main(): ... asyncio.run(main())
اگر لازم است چیزی را راهاندازی کنید، برای مثال سروری که روی یک سوکت گوش میدهد و سپس برای همیشه اجرا میشود، از
asyncio.run()و یکasyncio.Eventاستفاده کنید.پیش از:
def start_server(loop): ... loop = asyncio.get_event_loop() try: start_server(loop) loop.run_forever() finally: loop.close()
پس از:
def start_server(loop): ... async def main(): start_server(asyncio.get_running_loop()) await asyncio.Event().wait() asyncio.run(main())
اگر نیاز دارید چیزی را در یک حلقه رویداد اجرا کنید و سپس کد مسدودکنندهای را در اطراف آن اجرا کنید، از
asyncio.Runnerاستفاده کنید.پیش از:
async def operation_one(): ... def blocking_code(): ... async def operation_two(): ... loop = asyncio.get_event_loop() try: loop.run_until_complete(operation_one()) blocking_code() loop.run_until_complete(operation_two()) finally: loop.close()
پس از:
async def operation_one(): ... def blocking_code(): ... async def operation_two(): ... with asyncio.Runner() as runner: runner.run(operation_one()) blocking_code() runner.run(operation_two())
email¶
پارامتر isdst از
email.utils.localtime()حذف شد که در پایتون 3.12 منسوخ شده بود و از آن زمان نادیده گرفته میشد. (مشارکت Hugo van Kemenade در gh-118798.)
importlib.abc¶
حذف کلاسهای منسوخ
importlib.abc:ResourceReader(ازTraversableResourcesاستفاده کنید)Traversable(ازTraversableاستفاده کنید)TraversableResources(ازTraversableResourcesاستفاده کنید)
(مشارکت Jason R. Coombs و Hugo van Kemenade در gh-93963.)
itertools¶
حذف پشتیبانی از عملیات کپی، کپی عمیق و پیکل از پیمایشگرهای
itertools. این موارد از پایتون 3.12 هشدارDeprecationWarningمنتشر میکردند. (مشارکتشده توسط Raymond Hettinger در gh-101588.)
pathlib¶
پشتیبانی از ارسال آرگومانهای کلیدواژهای اضافی به
Pathحذف شد. در نسخههای قبلی، هر آرگومانی از این دست نادیده گرفته میشد. (مشارکتشده توسط Barney Gale در gh-74033.)پشتیبانی از ارسال آرگومانهای جایگاهی اضافی به
PurePath.relative_to()وis_relative_to()حذف شد. در نسخههای قبلی، هر آرگومانی از این قبیل به other الحاق میشد. (مشارکتشده توسط Barney Gale در gh-78707.)
pkgutil¶
توابع
get_loader()وfind_loader()که از پایتون 3.12 منسوخ شده بودند، حذف شدند. (با مشارکت Bénédikt Tran در gh-97850.)
pty¶
توابع
master_open()وslave_open()که از پایتون 3.12 منسوخ شده بودند، حذف شدند. به جای آنها ازpty.openpty()استفاده کنید. (مشارکت نیکیتا سوبولف در gh-118824.)
sqlite3¶
versionوversion_infoاز ماژولsqlite3حذف شدند؛ برای شماره نسخه واقعی کتابخانه SQLite رانتایم ازsqlite_versionوsqlite_version_infoاستفاده کنید. (مشارکتشده توسط هوگو ون کمِناده در gh-118924.)استفاده از دنبالهای از پارامترها با جاینگهدارهای نامدار، که از پایتون 3.12 منسوخ شده بود، اکنون
ProgrammingErrorایجاد میکند. (مشارکتشده توسط Erlend E. Aasland در gh-118928 و gh-101693.)
urllib¶
کلاس
Quoterکه از پایتون 3.11 منسوخ شده بود، ازurllib.parseحذف شد. (با مشارکت نیکیتا سوبولف در gh-118827.)کلاسهای
URLopenerوFancyURLopenerکه از پایتون 3.3 منسوخ شده بودند، ازurllib.requestحذف شدند.میتوان
myopener.open()را باurlopen()جایگزین کرد.myopener.retrieve()را میتوان باurlretrieve()جایگزین کرد. سفارشیسازیهای کلاسهای بازکننده (opener) را میتوان با ارسال هندلرهای سفارشی بهbuild_opener()جایگزین کرد. (مشارکتشده توسط Barney Gale در gh-84850.)
منسوخ¶
منسوخسازیهای جدید¶
گذر دادن یک عدد مختلط بهعنوان آرگومان real یا imag در سازندهی
complex()اکنون منسوخ شده است؛ اعداد مختلط باید فقط بهعنوان یک آرگومان جایگاهی واحد گذر داده شوند. (مشارکتشده توسط Serhiy Storchaka در gh-109218.)-
ارسال آرگومان کلیدواژهای مستندنشده prefix_chars به متد
add_argument_group()اکنون منسوخ شده است. (ارائهشده توسط Savannah Ostrowski در gh-125563.)مبدل نوع
argparse.FileTypeمنسوخ شد. هر چیزی که به مدیریت منابع مربوط میشود باید در پاییندست (downstream)، پس از تجزیه آرگومانها انجام شود. (مشارکت Serhiy Storchaka در gh-58032.)
-
تابع
asyncio.iscoroutinefunction()اکنون منسوخ شده است و در پایتون 3.16 حذف خواهد شد؛ به جای آن ازinspect.iscoroutinefunction()استفاده کنید. (با مشارکت Jiahao Li و Kumar Aditya در gh-122875.)سیستم سیاست
asyncioمنسوخ شده است و در Python 3.16 حذف خواهد شد. بهطور خاص، کلاسها و توابع زیر منسوخ شدهاند:کاربران باید برای استفاده از پیادهسازی حلقه رویداد دلخواه، از
asyncio.run()یاasyncio.Runnerبههمراه آرگومان loop_factory استفاده کنند.به عنوان مثال، برای استفاده از
asyncio.SelectorEventLoopدر ویندوز:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(مشارکتشده توسط Kumar Aditya در gh-127949.)
codecs: تابعcodecs.open()اکنون منسوخ شده است و در نسخهای آینده از پایتون حذف خواهد شد. به جای آن ازopen()استفاده کنید. (مشارکتشده توسط Inada Naoki در gh-133036.)-
در پلتفرمهای غیر از ویندوز، تنظیم
Structure._pack_برای استفاده از چیدمان حافظهی پیشفرض سازگار با MSVC، اکنون به نفع تنظیمStructure._layout_به'ms'منسوخ شده است و در پایتون 3.19 حذف خواهد شد. (با مشارکت Petr Viktorin در gh-131747.)فراخوانی
ctypes.POINTER()روی یک رشته اکنون منسوخ شده است. برای ساختارهای خودارجاع از نوعهای ناقص استفاده کنید. همچنین،ctypes._pointer_type_cacheداخلی منسوخ شده است. برای جزئیات بهروز پیادهسازی بهctypes.POINTER()مراجعه کنید. (مشارکتشده توسط Sergey Myrianov در gh-100926.)
functools: فراخوانی پیادهسازی پایتونیfunctools.reduce()با function یا sequence بهعنوان آرگومانهای کلیدواژهای اکنون منسوخ شده است؛ این پارامترها در پایتون 3.16 فقط جایگاهی خواهند شد. (مشارکتشده توسط Kirill Podoprigora در gh-121676.)logging: پشتیبانی از هندلرهای گزارشگیری سفارشی با آرگومان strm اکنون منسوخ شده است و قرار است در پایتون 3.16 حذف شود. در عوض، هندلرها را با آرگومان stream تعریف کنید. (مشارکتشده توسط Mariusz Felisiak در gh-115032.)mimetypes: پسوندهای معتبر برایmimetypes.MimeTypes.add_type()یا خالی هستند یا باید با '.' شروع شوند. پسوندهای بدون نقطه منسوخ شدهاند و در پایتون 3.16 یکValueErrorایجاد خواهند کرد. (ارائهشده توسط هوگو ون کمِناده در gh-75223.)nturl2path: این ماژول اکنون منسوخ شده است. به جای آن،urllib.request.url2pathname()وpathname2url()را فراخوانی کنید. (مشارکتشده توسط Barney Gale در gh-125866.)os: توابعos.popen()وos.spawn*اکنون بهطور نرم منسوخ (soft deprecated) هستند. دیگر نباید از آنها برای نوشتن کد جدید استفاده کنید. در عوض، استفاده از ماژولsubprocessتوصیه میشود. (با مشارکت Victor Stinner در gh-120743.)pathlib:pathlib.PurePath.as_uri()اکنون منسوخ شده و حذف آن در پایتون 3.19 برنامهریزی شده است. به جای آن ازpathlib.Path.as_uri()استفاده کنید. (مشارکتشده توسط برنی گیل در gh-123599.)pdb: ویژگی مستندنشدهیpdb.Pdb.curframe_localsاکنون یک پراپرتی فقطخواندنی منسوخ است که در نسخههای آیندهی پایتون حذف خواهد شد. دسترسی پویا با سربار کم به متغیرهای محلی فریم که در پایتون 3.13 توسط PEP 667 اضافه شد، به این معنی است که ارجاع به نهانگاه متغیرهای محلی فریم که پیشتر در این ویژگی ذخیره میشد، دیگر لازم نیست. اشکالزداهای مشتقشده باید در پایتون 3.13 و نسخههای بعدی، مستقیماً بهpdb.Pdb.curframe.f_localsدسترسی داشته باشند. (مشارکتشده توسط Tian Gao در gh-124369 و gh-125951.)symtable:symtable.Class.get_methods()به دلیل عدم استقبال منسوخ شد و حذف آن در پایتون 3.16 برنامهریزی شده است. (مشارکتشده توسط Bénédikt Tran در gh-119698.)tkinter: متدهایtrace_variable()،trace_vdelete()وtrace_vinfo()درtkinter.Variableاکنون منسوخ شدهاند. به جای آنها ازtrace_add()،trace_remove()وtrace_info()استفاده کنید. (مشارکتشده توسط Serhiy Storchaka در gh-120220.)urllib.parse: پذیرش اشیاء دارای مقادیر نادرست (مانند0و[]) بهجز رشتههای خالی، اشیاء شبهبایت وNoneدرparse_qsl()وparse_qs()اکنون منسوخ شده است. (مشارکتشده توسط Serhiy Storchaka در gh-116897.)
در پایتون 3.15 حذف خواهد شد¶
سیستم ایمپورت:
تنظیم
__cached__روی یک ماژول در حالی که__spec__.cachedتنظیم نشود، منسوخ شده است. در پایتون 3.15،__cached__دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم نخواهد شد یا در نظر گرفته نخواهد شد. (gh-97879)تنظیم
__package__روی یک ماژول بدون آنکه__spec__.parentتنظیم شود، منسوخ شده است. در پایتون 3.15،__package__دیگر توسط سیستم ایمپورت یا کتابخانه استاندارد تنظیم یا در نظر گرفته نخواهد شد. (gh-97879)
-
تابع مستندنشدهی
ctypes.SetPointerType()از پایتون 3.13 منسوخ شده است.
-
کلاس قدیمی و بهندرت استفادهشده
CGIHTTPRequestHandlerاز پایتون 3.13 منسوخ شده است. هیچ جایگزین مستقیمی وجود ندارد. برای برقراری رابط بین وبسرور و هندلر درخواست، هر چیزی بهتر از CGI است.پرچم
--cgiدر رابط خط فرمان python -m http.server از پایتون 3.13 منسوخ شده است.
-
متد
load_module(): بهجای آن ازexec_module()استفاده کنید.
-
PurePath.is_reserved()از پایتون 3.13 منسوخ شده است. برای تشخیص مسیرهای رزروشده در ویندوز ازos.path.isreserved()استفاده کنید.
-
java_ver()از پایتون 3.13 منسوخ شده است. این تابع تنها برای پشتیبانی از Jython مفید است، API گیجکنندهای دارد و عمدتاً آزمایشنشده است.
-
آرگومان check_home تابع
sysconfig.is_python_build()از پایتون 3.12 منسوخ شده است.
-
RLock()در پایتون 3.15 هیچ آرگومانی نخواهد گرفت. گذراندن هر آرگومانی از پایتون 3.14 منسوخ شده است، زیرا نسخه پایتونی هیچ آرگومانی را مجاز نمیداند، اما نسخه C هر تعداد آرگومان جایگاهی یا کلیدواژهای را میپذیرد و همه آرگومانها را نادیده میگیرد.
-
types.CodeType: دسترسی بهco_lnotabمطابق PEP 626 از نسخهی 3.10 منسوخ شده بود و قرار بود در 3.12 حذف شود، اما تنها در 3.12 یکDeprecationWarningمناسب دریافت کرد. ممکن است در 3.15 حذف شود. (با مشارکت Nikita Sobolev در gh-101866.)
-
سینتکس آرگومان کلیدواژهای مستندنشده برای ایجاد کلاسهای
NamedTuple(برای مثال،Point = NamedTuple("Point", x=int, y=int)) از پایتون 3.13 منسوخ شده است. بهجای آن از سینتکس مبتنی بر کلاس یا سینتکس تابعی استفاده کنید.هنگام استفاده از سینتکس تابعی
TypedDict، عدم ارسال مقدار به پارامتر fields (TD = TypedDict("TD")) یا ارسالNone(TD = TypedDict("TD", None)) از پایتون 3.13 منسوخ شده است. برای ایجاد یک TypedDict با صفر فیلد، ازclass TD(TypedDict): passیاTD = TypedDict("TD", {})استفاده کنید.تابع دکوراتور
@typing.no_type_check_decoratorاز Python 3.13 منسوخ شده است. پس از هشت سال حضور در ماژولtyping، هنوز هیچیک از بررسیگرهای نوع اصلی از آن پشتیبانی نکرده است.
wave:متدهای
getmark()،setmark()وgetmarkers()در کلاسهایWave_readوWave_writeاز پایتون 3.13 منسوخ شدهاند.
-
load_module()از پایتون 3.10 منسوخ شده است. به جای آن ازexec_module()استفاده کنید. (مشارکتشده توسط Jiahao Li در gh-125746.)
در انتظار حذف در پایتون 3.16¶
سیستم ایمپورت:
تنظیم
__loader__روی یک ماژول بدون آنکه__spec__.loaderتنظیم شود، منسوخ شده است. در پایتون 3.16،__loader__دیگر توسط سامانه ایمپورت یا کتابخانه استاندارد تنظیم نخواهد شد یا در نظر گرفته نخواهد شد.
-
کد قالب
'u'(wchar_t) در مستندات از پایتون 3.3 و در رانتایم از پایتون 3.13 منسوخ شده است. بهجای آن، برای نویسههای یونیکد از کد قالب'w'(Py_UCS4) استفاده کنید.
-
asyncio.iscoroutinefunction()منسوخ شده است و در پایتون 3.16 حذف خواهد شد؛ بهجای آن ازinspect.iscoroutinefunction()استفاده کنید. (مشارکتشده توسط Jiahao Li و Kumar Aditya در gh-122875.)سیستم سیاستگذاری
asyncioمنسوخ شده است و در پایتون 3.16 حذف خواهد شد. بهطور خاص، کلاسها و توابع زیر منسوخ شدهاند:کاربران باید برای استفاده از پیادهسازی حلقه رویداد مورد نظر، از
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، از پایتون 3.12 منسوخ شده است، زیرا نتایجی عجیب و خلاف شهود تولید میکند (-2و-1). برای نقیض منطقی یک مقدار بولی، بهجای آن ازnot xاستفاده کنید. در موارد نادری که به وارونسازی بیتی عدد صحیح زیرین نیاز دارید، آن را بهطور صریح بهintتبدیل کنید (~int(x)).
-
فراخوانی پیادهسازی پایتونیِ
functools.reduce()با function یا sequence بهعنوان آرگومانهای کلیدواژهای از پایتون 3.14 منسوخ شده است.
-
پشتیبانی از هندلرهای سفارشی گزارشگیری با آرگومان strm منسوخ شده و برای حذف در پایتون 3.16 برنامهریزی شده است. به جای آن، هندلرها را با آرگومان stream تعریف کنید. (مشارکت Mariusz Felisiak در gh-115032.)
-
پسوندهای معتبر برای
mimetypes.MimeTypes.add_type()با '.' شروع میشوند یا خالی هستند. پسوندهای بدون نقطه منسوخ شدهاند و در Python 3.16 باعث ایجادValueErrorمیشوند. (با مشارکت Hugo van Kemenade در gh-75223.)
-
استثنای
ExecErrorاز پایتون 3.14 منسوخ شده است. این استثنا از پایتون 3.4 به بعد توسط هیچ تابعی درshutilاستفاده نشده است و اکنون نام مستعاری برایRuntimeErrorاست.
-
متد
Class.get_methodsاز پایتون 3.14 منسوخ شده است.
sys:تابع
_enablelegacywindowsfsencoding()از پایتون 3.13 منسوخ شده است. به جای آن از متغیر محیطیPYTHONLEGACYWINDOWSFSENCODINGاستفاده کنید.
-
تابع
sysconfig.expand_makefile_vars()از پایتون 3.14 منسوخ شده است. بهجای آن از آرگومانvarsدرsysconfig.get_paths()استفاده کنید.
-
ویژگی مستندنشده و استفادهنشدهی
TarFile.tarfileاز پایتون 3.13 منسوخ شده است.
در انتظار حذف در پایتون 3.17¶
-
collections.abc.ByteStringبرای حذف در پایتون 3.17 برنامهریزی شده است.برای آزمایش اینکه آیا
objپروتکل بافر را در زمان اجرا پیادهسازی میکند، ازisinstance(obj, collections.abc.Buffer)استفاده کنید. برای استفاده در حاشیهنویسیهای نوع، یا ازBufferاستفاده کنید یا از یک اجتماع (union) که بهصراحت نوعهایی را که کد شما پشتیبانی میکند مشخص میکند (مثلاًbytes | bytearray | memoryview).ByteStringدر اصل قرار بود یک کلاس انتزاعی باشد که بهعنوان فرانوع (supertype) هر دوbytesوbytearrayعمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای ازByteStringاست، در واقع هرگز هیچ چیز مفیدی دربارهی آن شیء به شما نمیگفت. سایر نوعهای بافر رایج مانندmemoryviewنیز هرگز بهعنوان زیرنوعهایByteStringدر نظر گرفته نمیشدند (نه در زمان اجرا و نه توسط بررسیگرهای نوع ایستا).برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکتشده توسط شانتانو جین در gh-91896.)
-
پیش از پایتون 3.14، اجتماعهای سبک قدیمی (old-style unions) با استفاده از کلاس خصوصی
typing._UnionGenericAliasپیادهسازی میشدند. این کلاس دیگر برای پیادهسازی مورد نیاز نیست، اما برای سازگاری با نسخههای قبلی حفظ شده است و حذف آن برای پایتون 3.17 برنامهریزی شده است. کاربران باید بهجای تکیه بر جزئیات پیادهسازی خصوصی، از ابزارهای کمکی دروننگری مستند مانندtyping.get_origin()وtyping.get_args()استفاده کنند.typing.ByteStringکه از پایتون 3.9 منسوخ شده است، قرار است در پایتون 3.17 حذف شود.برای آزمایش اینکه آیا
objپروتکل بافر را در زمان اجرا پیادهسازی میکند، ازisinstance(obj, collections.abc.Buffer)استفاده کنید. برای استفاده در حاشیهنویسیهای نوع، یا ازBufferاستفاده کنید یا از یک اجتماع (union) که بهصراحت نوعهایی را که کد شما پشتیبانی میکند مشخص میکند (مثلاًbytes | bytearray | memoryview).ByteStringدر اصل قرار بود یک کلاس انتزاعی باشد که بهعنوان فرانوع (supertype) هر دوbytesوbytearrayعمل کند. اما از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای ازByteStringاست، در واقع هرگز هیچ چیز مفیدی دربارهی آن شیء به شما نمیگفت. سایر نوعهای بافر رایج مانندmemoryviewنیز هرگز بهعنوان زیرنوعهایByteStringدر نظر گرفته نمیشدند (نه در زمان اجرا و نه توسط بررسیگرهای نوع ایستا).برای جزئیات بیشتر به PEP 688 مراجعه کنید. (مشارکتشده توسط شانتانو جین در gh-91896.)
در انتظار حذف در پایتون 3.18¶
در انتظار حذف در پایتون 3.19¶
در انتظار حذف در نسخههای آینده¶
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بیاید، یک هشدار نحوی صادر میشود. در نسخهای در آینده این به یک خطای نحوی تبدیل خواهد شد. (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()از پایتون 3.3 منسوخ شده است؛ به جای آن ازwarning()استفاده کنید.mailbox: استفاده از ورودی StringIO و حالت متنی منسوخ شده است؛ به جای آن از BytesIO و حالت دودویی استفاده کنید.os: فراخوانیos.register_at_fork()در فرایند چندنخی.pydoc.ErrorDuringImport: مقدار تاپل برای پارامتر exc_info منسوخ شده است؛ از یک نمونه استثنا استفاده کنید.re: اکنون قواعد سختگیرانهتری برای ارجاعهای عددی گروه و نام گروهها در عبارات باقاعده اعمال میشود. اکنون فقط دنبالهای از ارقام اسکی بهعنوان ارجاع عددی پذیرفته میشود. نام گروه در الگوهای بایتی و رشتههای جایگزین اکنون فقط میتواند شامل حروف و ارقام اسکی و زیرخط باشد. (مشارکتشده توسط Serhiy Storchaka در gh-91760.)ماژولهای
sre_compile،sre_constantsوsre_parse.shutil: پارامتر onerror درrmtree()در پایتون 3.12 منسوخ شده است؛ به جای آن از پارامتر onexc استفاده کنید.گزینهها و پروتکلهای
ssl:ssl.SSLContextبدون آرگومان پروتکل منسوخ شده است.ssl.SSLContext:set_npn_protocols()وselected_npn_protocol()منسوخ شدهاند: به جای آنها از ALPN استفاده کنید.گزینههای
ssl.OP_NO_SSL*گزینههای
ssl.OP_NO_TLS*ssl.PROTOCOL_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استفاده نمیشود. برای حفظ سازگاری با کاربرانی که از این کلاس خصوصی استفاده میکنند، یک شیم سازگاری (compatibility shim) تا حداقل پایتون 3.17 ارائه خواهد شد. (مشارکت Jelle Zijlstra در gh-105499.)unittest.IsolatedAsyncioTestCase: منسوخ شده است که از یک مورد آزمون مقداری غیر ازNoneبرگردانده شود.توابع منسوخ
urllib.parse: بهجای آنها ازurlparse()استفاده کنیدsplitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()نباید نوشتن جزئی (partial write) انجام دهد.xml.etree.ElementTree: آزمودن مقدار درستی یکElementمنسوخ شده است. در نسخههای آینده، همیشهTrueبازگردانده خواهد شد. بهجای آن، آزمونهای صریحlen(elem)یاelem is not Noneرا ترجیح دهید.sys._clear_type_cache()منسوخ شده است: به جای آن ازsys._clear_internal_caches()استفاده کنید.
تغییرات بایتکد سیپایتون¶
آپکد
BINARY_SUBSCRبا آپکدBINARY_OPبه همراه آرگومان عملیات (oparg)NB_SUBSCRجایگزین شد. (مشارکتشده توسط Irit Katriel در gh-100239.)آپکدهای
BUILD_INTERPOLATIONوBUILD_TEMPLATEبه ترتیب برای ساخت نمونههای جدیدInterpolationوTemplateافزوده شدند. (مشارکتشده توسط Lysandros Nikolaou و دیگران در gh-132661؛ همچنین PEP 750: رشتههای قالبی را ببینید.)آپکد
BUILD_CONST_KEY_MAPحذف شد. بهجای آن ازBUILD_MAPاستفاده کنید. (مشارکتشده توسط Mark Shannon در gh-122160.)آپکد
LOAD_ASSERTION_ERRORباLOAD_COMMON_CONSTANTجایگزین شد و پشتیبانی از بارگذاریNotImplementedErrorاضافه شد.افزودن آپکدهای
LOAD_FAST_BORROWوLOAD_FAST_BORROW_LOAD_FAST_BORROWبرای کاهش سربار شمارش ارجاع زمانی که مفسر بتواند اثبات کند که ارجاع موجود در فریم بیش از ارجاع بارگذاریشده روی پشته عمر میکند. (مشارکتشده توسط Matt Page در gh-130704.)آپکد
LOAD_SMALL_INTاضافه شد که یک عدد صحیح کوچک برابر باopargرا روی پشته قرار میدهد. آپکدRETURN_CONSTحذف شد، زیرا دیگر استفاده نمیشود. (مشارکتشده توسط Mark Shannon در gh-125837.)دستورالعمل جدید
LOAD_SPECIALافزوده شد. آپکدهایwithوasync withبا استفاده از دستورالعمل جدید تولید میشود. دستورالعملهایBEFORE_WITHوBEFORE_ASYNC_WITHحذف شدند. (با مشارکت Mark Shannon در gh-120507.)افزودن آپکد
POP_ITERبرای پشتیبانی از پیمایشگرهای «مجازی». (مشارکتشده توسط Mark Shannon در gh-132554.)
شبهدستورها¶
شبهدستور
ANNOTATIONS_PLACEHOLDERبرای پشتیبانی از حاشیهنویسیهای سطح ماژول که بهطور جزئی اجرا شدهاند، همراه با ارزیابی معوق حاشیهنویسیها اضافه شد. (مشارکتشده توسط Jelle Zijlstra در gh-130907.)شبهدستور
BINARY_OP_EXTENDافزوده شد که جفتی از توابع (توابع نگهبان و تخصصیسازی) را که از نهانگاه درونخطی در دسترساند اجرا میکند. (مشارکتشده توسط Irit Katriel در gh-100239.)سه تخصصیسازی برای
CALL_KWاضافه شد؛CALL_KW_PYبرای فراخوانی توابع پایتون،CALL_KW_BOUND_METHODبرای فراخوانی متدهای مقید وCALL_KW_NON_PYبرای همهی فراخوانیهای دیگر. (مشارکتشده توسط مارک شانون در gh-118093.)افزودن شبهدستورالعملهای
JUMP_IF_TRUEوJUMP_IF_FALSE، پرشهای شرطی که بر پشته تأثیر نمیگذارند. با دنبالهیCOPY 1،TO_BOOLوPOP_JUMP_IF_TRUE/FALSEجایگزین میشوند. (مشارکتشده توسط Irit Katriel در gh-124285.)افزودن شبهدستور (pseudo instruction)
LOAD_CONST_MORTAL. (مشارکتشده توسط Mark Shannon در gh-128685.)شبهدستور
LOAD_CONST_IMMORTALاضافه شد که همان کارLOAD_CONSTرا انجام میدهد، اما برای اشیاء نامیرا کارآمدتر است. (مشارکتشده توسط مارک شنون در gh-125837.)افزودن شبهدستورالعمل
NOT_TAKENکه توسطsys.monitoringبرای ثبت رویدادهای انشعاب (مانندBRANCH_LEFT) استفاده میشود. (مشارکتشده توسط Mark Shannon در gh-122548.)
تغییرات C API¶
API پیکربندی پایتون در C¶
افزودن PyInitConfig C API برای پیکربندی مقداردهی اولیهی پایتون بدون تکیه بر ساختارهای C و امکان اعمال تغییرات سازگار با ABI در آینده.
PyConfig C API مربوط به PEP 587 با افزودن PyInitConfig_AddModule() که میتوان از آن برای افزودن یک ماژول توسعهای توکار استفاده کرد، تکمیل شد؛ قابلیتی که پیشتر «inittab» نامیده میشد.
افزودن توابع PyConfig_Get() و PyConfig_Set() برای دریافت و تنظیم پیکربندی فعلی رانتایم.
PEP 587 «پیکربندی مقداردهی اولیه پایتون» تمام روشهای پیکربندی مقداردهی اولیهی پایتون را یکپارچه کرد. این PEP همچنین پیکربندی پیشمقداردهی اولیه و مقداردهی اولیهی پایتون را در یک API واحد یکپارچه میکند. افزون بر این، این PEP برای تعبیه کردن پایتون تنها یک گزینه فراهم میکند، بهجای دو گزینهی «Python» و «Isolated» (PEP 587)، تا API را بیش از پیش ساده کند.
API سطح پایینترِ PyConfig مربوط به PEP 587 همچنان برای موارد استفادهای که بهطور عمدی سطح بالاتری از جفتشدگی (coupling) با جزئیات پیادهسازی سیپایتون دارند، در دسترس است (مانند شبیهسازی تمامی کارکردهای رابط خط فرمان سیپایتون، از جمله سازوکارهای پیکربندی آن).
(مشارکتشده توسط Victor Stinner در gh-107954.)
ویژگیهای جدید در API زبان C¶
افزودن
Py_PACK_VERSION()وPy_PACK_FULL_VERSION()، دو ماکروی جدید برای بستهبندی بیتی (bit-packing) شمارههای نسخه پایتون. این برای مقایسه باPy_VersionیاPY_VERSION_HEXمفید است. (مشارکتشده توسط Petr Viktorin در gh-128629.)افزودن تابع
PyBytes_Join(sep, iterable)، مشابهsep.join(iterable)در پایتون. (با مشارکت Victor Stinner در gh-121645.)افزودن توابعی برای دستکاری پیکربندی مفسر پایتون فعلی در زمان اجرا (PEP 741: Python configuration C API):
(مشارکتشده توسط Victor Stinner در gh-107954.)
افزودن توابعی برای پیکربندی مقداردهی اولیهی پایتون (PEP 741: C API برای پیکربندی پایتون):
(مشارکتشده توسط Victor Stinner در gh-107954.)
تابع
Py_fopen()برای باز کردن یک پرونده اضافه شد. این تابع مشابه تابع استانداردfopen()در C کار میکند، با این تفاوت که یک شیء پایتون را برای پارامتر path میپذیرد و در صورت خطا یک استثنا تنظیم میکند. برای بستن یک پرونده باید از تابع جدید متناظرPy_fclose()استفاده کرد. (مشارکتکرده: Victor Stinner در gh-127350.)افزودن
Py_HashBuffer()برای محاسبه و بازگرداندن مقدار هش یک بافر. (مشارکتشده توسط آنتوان پیترو و ویکتور استینر در gh-122854.)افزودن توابع کمکی
PyImport_ImportModuleAttr()وPyImport_ImportModuleAttrString()برای ایمپورت کردن یک ماژول و به دست آوردن یک ویژگی از ماژول. (مشارکتشده توسط Victor Stinner در gh-128911.)افزودن
PyIter_NextItem()برای جایگزینیPyIter_Next()، که مقدار بازگشتی آن مبهم است. (مشارکتشده توسط Irit Katriel و Erlend Aasland در gh-105201.)تابع
PyLong_GetSign()برای بهدستآوردن علامت اشیاءintاضافه شد. (با مشارکت Sergey B Kirpichev در gh-116560.)توابع
PyLong_IsPositive()،PyLong_IsNegative()وPyLong_IsZero()به ترتیب برای بررسی مثبت، منفی یا صفر بودنPyLongObjectاضافه شدند. (با مشارکت James Roy و Sergey B Kirpichev در gh-126061.)توابع جدیدی برای تبدیل اعداد C
<stdint.h>به اشیاءintپایتون و برعکس اضافه شدهاند:(مشارکتشده توسط Victor Stinner در gh-120389.)
افزودن API جدیدی برای ایمپورت و اکسپورت اشیاء
intپایتون (PEP 757):(مشارکتشده توسط Sergey B Kirpichev و Victor Stinner در gh-102471.)
افزودن
PyMonitoring_FireBranchLeftEvent()وPyMonitoring_FireBranchRightEvent()برای تولید رویدادهایBRANCH_LEFTوBRANCH_RIGHT، به ترتیب. (مشارکت Mark Shannon در gh-122548.)افزودن تابع
PyType_Freeze()برای تغییرناپذیر کردن یک نوع. (با مشارکت ویکتور استینر در gh-121654.)افزودن
PyType_GetBaseByToken()و جایگاهPy_tp_tokenبرای شناسایی آسانتر کلاس پایه، که تلاش میکند مشکل بررسی نوعِ اشارهشده در PEP 630 را حل کند. (مشارکتشده در gh-124153.)تابع جدید
PyUnicode_Equal()برای بررسی برابر بودن دو رشته افزوده شد. این تابع همچنین به C API محدود افزوده شده است. (ارائهشده توسط ویکتور استینر در gh-124502.)یک API جدید
PyUnicodeWriterبا توابع زیر برای ایجاد یک شیءstrپایتون اضافه شد:(با مشارکت Victor Stinner در gh-119182.)
قالبهای
kوKدرPyArg_ParseTuple()و توابع مشابه، اکنون در صورت وجود از__index__()استفاده میکنند، مانند تمام قالبهای عدد صحیح دیگر. (مشارکتشده توسط Serhiy Storchaka در gh-112068.)افزودن پشتیبانی از واحد قالب جدید
pدرPy_BuildValue()که یک شیءboolپایتون را از یک عدد صحیح C تولید میکند. (با مشارکت Pablo Galindo در bpo-45325.)تابع
PyUnstable_IsImmortal()برای تعیین اینکه آیا یک شیء immortal است، به منظور اشکالزدایی اضافه شد. (مشارکتشده توسط Peter Bierma در gh-128509.)افزودن
PyUnstable_Object_EnableDeferredRefcount()برای فعالسازی شمارش ارجاعِ معوق، همانطور که در PEP 703 تشریح شده است.افزودن
PyUnstable_Object_IsUniquelyReferenced()بهعنوان جایگزینی برایPy_REFCNT(op) == 1در ساختهای نخآزاد. (مشارکتشده توسط Peter Bierma در gh-133140.)افزودن
PyUnstable_Object_IsUniqueReferencedTemporary()برای تعیین اینکه آیا یک شیء روی پشتهی عملوندهای مفسر، شیء موقت یکتا است یا خیر. در برخی موارد میتوان از این تابع بهعنوان جایگزینی برای بررسی برابر1بودنPy_REFCNT()برای اشیاء پایتونی که بهعنوان آرگومان به توابع C API پاس داده میشوند، استفاده کرد. (مشارکتشده توسط Sam Gross در gh-133164.)
تغییرات API محدود C¶
در C API محدود نسخه 3.14 و جدیدتر،
Py_TYPE()وPy_REFCNT()اکنون بهصورت یک فراخوانی تابع مات پیادهسازی شدهاند تا جزئیات پیادهسازی پنهان شود. (با مشارکت Victor Stinner در gh-120600 و gh-124127.)ماکروهای
PySequence_Fast_GET_SIZE،PySequence_Fast_GET_ITEMوPySequence_Fast_ITEMSاز C API محدود حذف شدند، زیرا این ماکروها همیشه در C API محدود معیوب بودهاند. (مشارکتشده توسط Victor Stinner در gh-91417.)
APIهای C حذفشده¶
ایجاد
انواع تغییرناپذیربا کلاسهای پایهی تغییرپذیر در پایتون 3.12 منسوخ شد و اکنونTypeErrorایجاد میکند. (مشارکت نیکیتا سوبولف در gh-119775.)عضو
PyDictObject.ma_version_tagکه در پایتون 3.12 منسوخ شده بود، حذف شد. به جای آن از APIPyDict_AddWatcher()استفاده کنید. (با مشارکت Sam Gross در gh-124296.)تابع خصوصی
_Py_InitializeMain()حذف شد. این تابع یک API آزمایشی بود که توسط PEP 587 به پایتون 3.8 افزوده شد. (مشارکتشده توسط Victor Stinner در gh-129033.)APIهای غیرمستند
Py_C_RECURSION_LIMITوPyThreadState.c_recursion_remainingحذف شدند. این APIها در 3.13 افزوده شده بودند و بدون منسوخشدن حذف شدند. برای محافظت در برابر بازگشتی بیمهار در کد C، ازPy_EnterRecursiveCall()استفاده کنید. (حذفشده توسط Petr Viktorin در gh-133079؛ به gh-130396 نیز مراجعه کنید.)
APIهای C منسوخ¶
ماکروی
Py_HUGE_VALاکنون soft deprecated است. به جای آن ازPy_INFINITYاستفاده کنید. (مشارکتشده توسط Sergey B Kirpichev در gh-120026.)ماکروهای
Py_IS_NAN،Py_IS_INFINITYوPy_IS_FINITEاکنون نرممنسوخ هستند. بهجای آنها ازisnan،isinfوisfiniteاستفاده کنید که از C99 به بعد درmath.hدر دسترس هستند. (مشارکت Sergey B Kirpichev در gh-119613.)دنبالههای غیرتاپل اکنون بهعنوان آرگومان برای واحد قالب (format unit)
(items)درPyArg_ParseTuple()و سایر توابع تجزیه آرگومان منسوخ شدهاند، اگر items شامل واحدهای قالب باشد که یک بافر امانتی یا یک ارجاع امانتی ذخیره میکنند. (مشارکتشده توسط Serhiy Storchaka در gh-50333.)تابع
_PyMonitoring_FireBranchEventاکنون منسوخ شده است و باید با فراخوانیهایPyMonitoring_FireBranchLeftEvent()وPyMonitoring_FireBranchRightEvent()جایگزین شود.تابع
PySequence_In()که پیشتر مستند نشده بود، اکنون soft deprecated است. بهجای آن ازPySequence_Contains()استفاده کنید. (مشارکتشده توسط Yuki Kobayashi در gh-127896.)
در پایتون 3.15 حذف خواهد شد¶
تابع
PyImport_ImportModuleNoBlock(): به جای آن ازPyImport_ImportModule()استفاده کنید.PyWeakref_GetObject()وPyWeakref_GET_OBJECT(): بهجای آنها ازPyWeakref_GetRef()استفاده کنید. میتوان از پروژهی pythoncapi-compat برای دسترسی بهPyWeakref_GetRef()در پایتون 3.12 و نسخههای قدیمیتر استفاده کرد.نوع
Py_UNICODEو ماکرویPy_UNICODE_WIDE: بهجای آن ازwchar_tاستفاده کنید.PyUnicode_AsDecodedObject(): بهجای آن ازPyCodec_Decode()استفاده کنید.PyUnicode_AsDecodedUnicode(): به جای آن ازPyCodec_Decode()استفاده کنید؛ توجه داشته باشید که برخی کدکها، مثلاً "base64"، ممکن است نوعی غیر ازstr، مانندbytes، برگردانند.PyUnicode_AsEncodedObject(): بهجای آن ازPyCodec_Encode()استفاده کنید.PyUnicode_AsEncodedUnicode(): به جای آن ازPyCodec_Encode()استفاده کنید؛ توجه داشته باشید که برخی از کدکها (مثلاً «base64») ممکن است نوعی غیر ازbytes، مانندstr، برگردانند.توابع مقداردهی اولیه پایتون، منسوخشده در پایتون 3.13:
Py_GetPath(): بهجای آن ازPyConfig_Get("module_search_paths")(sys.path) استفاده کنید.Py_GetPrefix(): بهجای آن ازPyConfig_Get("base_prefix")(sys.base_prefix) استفاده کنید. اگر لازم است به محیطهای مجازی رسیدگی شود، ازPyConfig_Get("prefix")(sys.prefix) استفاده کنید.Py_GetExecPrefix(): به جای آن ازPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix) استفاده کنید. اگر نیاز به مدیریت محیطهای مجازی باشد، ازPyConfig_Get("exec_prefix")(sys.exec_prefix) استفاده کنید.Py_GetProgramFullPath(): به جای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetProgramName(): به جای آن ازPyConfig_Get("executable")(sys.executable) استفاده کنید.Py_GetPythonHome(): بهجای آن ازPyConfig_Get("home")یا متغیر محیطیPYTHONHOMEاستفاده کنید.
میتوان از پروژهی pythoncapi-compat برای به دست آوردن
PyConfig_Get()در پایتون 3.13 و نسخههای قدیمیتر استفاده کرد.توابعی برای پیکربندی راهاندازی پایتون که در پایتون 3.11 منسوخ شدهاند:
PySys_SetArgvEx(): بهجای آن،PyConfig.argvرا تنظیم کنید.PySys_SetArgv(): بهجای آن،PyConfig.argvرا تنظیم کنید.Py_SetProgramName(): به جای آن،PyConfig.program_nameرا تنظیم کنید.Py_SetPythonHome(): بهجای آن،PyConfig.homeرا تنظیم کنید.PySys_ResetWarnOptions(): به جای آن،sys.warnoptionsوwarnings.filtersرا پاک کنید.
باید بهجای آن از API
Py_InitializeFromConfig()به همراهPyConfigاستفاده شود.متغیرهای پیکربندی سراسری:
Py_DebugFlag: بهجای آن ازPyConfig.parser_debugیاPyConfig_Get("parser_debug")استفاده کنید.Py_VerboseFlag: بهجای آن ازPyConfig.verboseیاPyConfig_Get("verbose")استفاده کنید.Py_QuietFlag: بهجای آن ازPyConfig.quietیاPyConfig_Get("quiet")استفاده کنید.Py_InteractiveFlag: بهجای آن ازPyConfig.interactiveیاPyConfig_Get("interactive")استفاده کنید.Py_InspectFlag: به جای آن ازPyConfig.inspectیاPyConfig_Get("inspect")استفاده کنید.Py_OptimizeFlag: به جای آن ازPyConfig.optimization_levelیاPyConfig_Get("optimization_level")استفاده کنید.Py_NoSiteFlag: به جای آن ازPyConfig.site_importیاPyConfig_Get("site_import")استفاده کنید.Py_BytesWarningFlag: بهجای آن ازPyConfig.bytes_warningیاPyConfig_Get("bytes_warning")استفاده کنید.Py_FrozenFlag: به جای آن ازPyConfig.pathconfig_warningsیاPyConfig_Get("pathconfig_warnings")استفاده کنید.Py_IgnoreEnvironmentFlag: بهجای آن ازPyConfig.use_environmentیاPyConfig_Get("use_environment")استفاده کنید.Py_DontWriteBytecodeFlag: بهجای آن ازPyConfig.write_bytecodeیاPyConfig_Get("write_bytecode")استفاده کنید.Py_NoUserSiteDirectory: بهجای آن ازPyConfig.user_site_directoryیاPyConfig_Get("user_site_directory")استفاده کنید.Py_UnbufferedStdioFlag: به جای آن ازPyConfig.buffered_stdioیاPyConfig_Get("buffered_stdio")استفاده کنید.Py_HashRandomizationFlag: به جای آن ازPyConfig.use_hash_seedوPyConfig.hash_seedیاPyConfig_Get("hash_seed")استفاده کنید.Py_IsolatedFlag: بهجای آن ازPyConfig.isolatedیاPyConfig_Get("isolated")استفاده کنید.Py_LegacyWindowsFSEncodingFlag: بهجای آن ازPyPreConfig.legacy_windows_fs_encodingیاPyConfig_Get("legacy_windows_fs_encoding")استفاده کنید.Py_LegacyWindowsStdioFlag: بهجای آن ازPyConfig.legacy_windows_stdioیاPyConfig_Get("legacy_windows_stdio")استفاده کنید.Py_FileSystemDefaultEncoding،Py_HasFileSystemDefaultEncoding: بهجای آن ازPyConfig.filesystem_encodingیاPyConfig_Get("filesystem_encoding")استفاده کنید.Py_FileSystemDefaultEncodeErrors: بهجای آن ازPyConfig.filesystem_errorsیاPyConfig_Get("filesystem_errors")استفاده کنید.Py_UTF8Mode: بهجای آن ازPyPreConfig.utf8_modeیاPyConfig_Get("utf8_mode")استفاده کنید. (نگاه کنید بهPy_PreInitialize())
برای تنظیم این گزینهها، باید از API
Py_InitializeFromConfig()همراه باPyConfigاستفاده شود. یا میتوان ازPyConfig_Get()برای دریافت این گزینهها در رانتایم استفاده کرد.
در انتظار حذف در پایتون 3.16¶
نسخهی همراه
libmpdec.
در انتظار حذف در پایتون 3.18¶
توابع خصوصی زیر منسوخ شدهاند و برای حذف در Python 3.18 برنامهریزی شدهاند:
_PyBytes_Join(): ازPyBytes_Join()استفاده کنید._PyDict_GetItemStringWithError(): ازPyDict_GetItemStringRef()استفاده کنید._PyDict_Pop(): ازPyDict_Pop()استفاده کنید._PyLong_Sign(): ازPyLong_GetSign()استفاده کنید._PyLong_FromDigits()و_PyLong_New(): ازPyLongWriter_Create()استفاده کنید._PyThreadState_UncheckedGet(): ازPyThreadState_GetUnchecked()استفاده کنید._PyUnicode_AsString(): ازPyUnicode_AsUTF8()استفاده کنید._PyUnicodeWriter_Init():_PyUnicodeWriter_Init(&writer)را باwriter = PyUnicodeWriter_Create(0)جایگزین کنید._PyUnicodeWriter_Finish():_PyUnicodeWriter_Finish(&writer)را باPyUnicodeWriter_Finish(writer)جایگزین کنید._PyUnicodeWriter_Dealloc():_PyUnicodeWriter_Dealloc(&writer)را باPyUnicodeWriter_Discard(writer)جایگزین کنید._PyUnicodeWriter_WriteChar():_PyUnicodeWriter_WriteChar(&writer, ch)را باPyUnicodeWriter_WriteChar(writer, ch)جایگزین کنید._PyUnicodeWriter_WriteStr():_PyUnicodeWriter_WriteStr(&writer, str)را باPyUnicodeWriter_WriteStr(writer, str)جایگزین کنید._PyUnicodeWriter_WriteSubstring():_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)را باPyUnicodeWriter_WriteSubstring(writer, str, start, end)جایگزین کنید._PyUnicodeWriter_WriteASCIIString():_PyUnicodeWriter_WriteASCIIString(&writer, str)را باPyUnicodeWriter_WriteASCII(writer, str)جایگزین کنید._PyUnicodeWriter_WriteLatin1String():_PyUnicodeWriter_WriteLatin1String(&writer, str)را باPyUnicodeWriter_WriteUTF8(writer, str)جایگزین کنید._PyUnicodeWriter_Prepare(): (بدون جایگزین)._PyUnicodeWriter_PrepareKind(): (بدون جایگزین)._Py_HashPointer(): ازPy_HashPointer()استفاده کنید._Py_fopen_obj(): ازPy_fopen()استفاده کنید.
میتوان از پروژهی pythoncapi-compat برای دسترسی به این توابع عمومی جدید در پایتون 3.13 و نسخههای قدیمیتر استفاده کرد. (مشارکتشده توسط Victor Stinner در gh-128863.)
در انتظار حذف در نسخههای آینده¶
APIهای زیر منسوخ شدهاند و حذف خواهند شد، هرچند در حال حاضر هیچ تاریخی برای حذف آنها تعیین نشده است.
Py_TPFLAGS_HAVE_FINALIZE: از پایتون 3.8 به بعد نیازی به آن نیست.PyErr_Fetch(): بهجای آن ازPyErr_GetRaisedException()استفاده کنید.PyErr_NormalizeException(): بهجای آن ازPyErr_GetRaisedException()استفاده کنید.PyErr_Restore(): به جای آن ازPyErr_SetRaisedException()استفاده کنید.PyModule_GetFilename(): بهجای آن ازPyModule_GetFilenameObject()استفاده کنید.PyOS_AfterFork(): بهجای آن ازPyOS_AfterFork_Child()استفاده کنید.PySlice_GetIndicesEx(): به جای آن ازPySlice_Unpack()وPySlice_AdjustIndices()استفاده کنید.PyUnicode_READY(): از پایتون 3.12 به بعد دیگر لازم نیستPyErr_Display(): بهجای آن ازPyErr_DisplayException()استفاده کنید._PyErr_ChainExceptions(): بهجای آن از_PyErr_ChainExceptions1()استفاده کنید.عضو
PyBytesObject.ob_shash: به جای آنPyObject_Hash()را فراخوانی کنید.API ذخیرهسازی نخمحلی (TLS):
PyThread_create_key(): بهجای آن ازPyThread_tss_alloc()استفاده کنید.PyThread_delete_key(): بهجای آن ازPyThread_tss_free()استفاده کنید.PyThread_set_key_value(): بهجای آن ازPyThread_tss_set()استفاده کنید.PyThread_get_key_value(): بهجای آن ازPyThread_tss_get()استفاده کنید.PyThread_delete_key_value(): به جای آن ازPyThread_tss_delete()استفاده کنید.PyThread_ReInitTLS(): از پایتون 3.7 به بعد لازم نیست.
تغییرات ساخت¶
PEP 776: Emscripten اکنون یک پلتفرم با پشتیبانی رسمی در سطح ۳ است. بهعنوان بخشی از این تلاش، بیش از ۲۵ اشکال در Emscripten libc رفع شد. Emscripten اکنون پشتیبانی از
ctypes،termiosوfcntl، و همچنین پشتیبانی آزمایشی از پوسته تعاملی پیشفرض جدید را در بر میگیرد. (مشارکتشده توسط R. Hood Chatham در gh-127146، gh-127683 و gh-136931.)نسخههای دودویی رسمی اندروید اکنون در python.org ارائه میشوند.
اکنون برای تولید
configureبه GNU Autoconf 2.72 نیاز است. (مشارکتشده توسط Erlend Aasland در gh-115765.)wasm32-unknown-emscriptenاکنون یک پلتفرم سطح ۳ بر اساس PEP 11 است. (مشارکتشده توسط R. Hood Chatham در gh-127146، gh-127683 و gh-136931.)اکنون میتوان پیوندسازی مبتنی بر
#pragmaباpython3*.libرا با استفاده از Py_NO_LINK_LIB غیرفعال کرد. (مشارکتشده توسط ژان-کریستوف فیلیون-رابین در gh-82909.)سیپایتون اکنون برای بهبود امنیت، مجموعهای از گزینههای توصیهشدهی کامپایلر را بهصورت پیشفرض فعال میکند. برای غیرفعال کردن آنها از گزینهی
--disable-safetyدرconfigureاستفاده کنید، یا برای مجموعهی بزرگتری از گزینههای کامپایلر از گزینهی--enable-slower-safetyاستفاده کنید، هرچند با هزینهی کارایی.ماکروی
WITH_FREELISTSو گزینهی--without-freelistsدرconfigureحذف شدهاند.گزینهی جدید
configureبه نام--with-tail-call-interpمیتواند برای فعال کردن مفسر آزمایشی فراخوانی انتهایی به کار رود. برای جزئیات بیشتر به نوع جدیدی از مفسر مراجعه کنید.برای غیرفعال کردن پشتیبانی جدید اشکالزدایی از راه دور، از گزینهی
--without-remote-debugدرconfigureاستفاده کنید. این کار ممکن است به دلایل امنیتی مفید باشد.اکنون میتوان برنامههای iOS و macOS را برای تغییر مسیر محتوای
stdoutوstderrبه گزارش سیستم پیکربندی کرد. (ارائهشده توسط راسل کیت-مگی در gh-127592.)بستر آزمون (testbed) iOS اکنون میتواند خروجی آزمون را در حین اجرای آزمون بهصورت جریانی پخش کند. همچنین میتوان از بستر آزمون برای اجرای بدنهی آزمون پروژههایی غیر از خودِ سیپایتون استفاده کرد. (مشارکتشده توسط Russell Keith-Magee در gh-127592.)
build-details.json¶
نصبهای پایتون اکنون شامل یک پرونده جدید به نام build-details.json هستند. این یک سند JSON ایستا است که جزئیات ساخت سیپایتون را در بر دارد تا امکان دروننگری بدون نیاز به اجرای کد فراهم شود. این برای موارد استفادهای مانند راهاندازهای پایتون، کامپایل متقاطع و غیره مفید است.
پروندهی build-details.json باید در پوشهی کتابخانه استاندارد مستقل از پلتفرم نصب شود. این پوشه با مسیر نصب 'stdlib' در sysconfig مطابقت دارد که میتوان آن را با اجرای sysconfig.get_path('stdlib') یافت.
همچنین ملاحظه نمائید
PEP 739 -- build-details.json 1.0 -- پروندهی توصیف ایستا برای جزئیات ساخت پایتون
قطع امضاهای PGP¶
امضاهای PGP (Pretty Good Privacy) برای نسخههای پایتون 3.14 یا نسخههای آینده ارائه نخواهند شد. برای راستیآزمایی مصنوعات (artifacts) سیپایتون، کاربران باید از مواد راستیآزمایی Sigstore استفاده کنند. نسخهها از پایتون 3.11 به بعد با استفاده از Sigstore امضا شدهاند.
این تغییر در فرایند انتشار در PEP 761 مشخص شده است.
پایتون نخآزاد بهطور رسمی پشتیبانی میشود¶
نسخهی نخآزاد پایتون اکنون پشتیبانی میشود و دیگر آزمایشی نیست. این آغازِ فاز دوم است که در آن پایتون نخآزاد بهطور رسمی پشتیبانی میشود اما همچنان اختیاری است.
تیم نخبندی آزاد اطمینان دارد که پروژه در مسیر درست قرار دارد و از فداکاری مستمر همهی کسانی که برای آمادهسازی نخبندی آزاد جهت پذیرش گستردهتر در سراسر کامیونیتی پایتون تلاش میکنند، قدردانی میکند.
با این توصیهها و پذیرش این PEP (پیشنهاد بهبود پایتون)، کامیونیتی توسعهدهندگان پایتون باید بهطور گسترده اعلام کند که نخبندی آزاد هماکنون و در آینده یک گزینهی پشتیبانیشده برای ساخت پایتون است و اینکه بدون یک برنامهی منسوخسازی مناسب حذف نخواهد شد.
هنوز هیچ تصمیمی برای گذار به فاز III، که در آن نخبندی آزاد ساخت پیشفرض یا تنها ساخت پایتون باشد، گرفته نشده است و این تصمیم به عوامل متعددی، هم در خود سیپایتون و هم در کامیونیتی، وابسته است. این تصمیم به آینده مربوط است.
نسخههای دودویی برای کامپایلر آزمایشی در لحظه¶
پروندههای دودویی انتشار رسمی macOS و Windows اکنون شامل یک کامپایلر آزمایشی در لحظه هستند. اگرچه استفاده از آن در محیط عملیاتی توصیه نمیشود، میتوان آن را با تنظیم PYTHON_JIT=1 بهعنوان یک متغیر محیطی آزمایش کرد. ساختهای پاییندستی از کد منبع و بازتوزیعکنندگان میتوانند از گزینهی پیکربندی --enable-experimental-jit=yes-off برای رفتاری مشابه استفاده کنند.
JIT در مرحلهی اولیه قرار دارد و همچنان بهطور فعال در حال توسعه است. به همین دلیل، تأثیر معمولِ فعالسازی آن بر کارایی میتواند بسته به بار کاری، از ۱۰٪ کندتر تا ۲۰٪ سریعتر متغیر باشد. برای کمک به آزمون و ارزیابی، مجموعهای از توابع دروننگری در فضای نام sys._jit ارائه شده است. میتوان از sys._jit.is_available() برای تعیین اینکه آیا پرونده اجرایی فعلی از کامپایل JIT پشتیبانی میکند یا خیر، و از sys._jit.is_enabled() برای تشخیص اینکه آیا کامپایل JIT برای فرایند فعلی فعال شده است یا خیر استفاده کرد.
در حال حاضر، مهمترین قابلیتی که وجود ندارد، این است که اشکالزداهای بومی و پروفایلگیرهایی مانند gdb و perf نمیتوانند پشته را از میان فریمهای JIT باز کنند (اشکالزداهای پایتون و پروفایلگیرهایی مانند pdb یا profile، بدون تغییر به کار خود ادامه میدهند). نسخههای نخآزاد از کامپایل در لحظه پشتیبانی نمیکنند.
لطفاً هر باگ یا افت عملکرد جدیای که با آن مواجه میشوید را گزارش کنید!
همچنین ملاحظه نمائید
انتقال به پایتون 3.14¶
این بخش تغییرات پیشتر شرح دادهشده و سایر رفع اشکالهایی را که ممکن است نیازمند تغییراتی در کد شما باشند، فهرست میکند.
تغییرات در API پایتون¶
در پلتفرمهای یونیکس بهجز macOS، اکنون forkserver بهجای fork، روش شروع پیشفرض برای
multiprocessingوProcessPoolExecutorاست.برای جزئیات، به (1) و (2) مراجعه کنید.
اگر با خطاهای
NameErrorیا خطاهای پیکلسازی ناشی ازmultiprocessingیاconcurrent.futuresمواجه شدید، به محدودیتهای forkserver مراجعه کنید.این تغییر بر ویندوز یا macOS تأثیری نمیگذارد، جایی که 'spawn' همچنان روش آغاز پیشفرض باقی میماند.
functools.partialاکنون یک توصیفگر متد است. اگر میخواهید رفتار قدیمی را حفظ کنید، آن را درstaticmethod()پوشش دهید. (مشارکتشده توسط Serhiy Storchaka و Dominykas Grigonis در gh-121027.)زبالهروب اکنون افزایشی است، که به این معناست که رفتار
gc.collect()اندکی تغییر میکند:gc.collect(1): یک مرحله از زبالهروبی را انجام میدهد، نه اینکه نسل ۱ را جمعآوری کند.سایر فراخوانیهای
gc.collect()بدون تغییر باقی میمانند.
تابع
locale.nl_langinfo()اکنون در برخی موارد locale مربوط بهLC_CTYPEرا بهطور موقت تنظیم میکند. این تغییر موقت بر نخهای دیگر تأثیر میگذارد. (با مشارکت Serhiy Storchaka در gh-69998.)pickle.dump()وpickle.dumps()اکنون برای برخی شکستهایی که پیشتر بسته به پیادهسازی بهAttributeError،ImportError،ValueError،UnicodeEncodeErrorیاPicklingErrorمنجر میشدند،PicklingErrorایجاد میکنند (برای مثال، پیکل کردن یک شیء محلی یا شیئی که ماژول آن نمیتواند ایمپورت شود). استثنای اصلی بهPicklingErrorزنجیر میشود. کدی که این استثناها را میگیرد بایدPicklingErrorرا نیز بگیرد. (مشارکتشده توسط Serhiy Storchaka در gh-122311.)types.UnionTypeاکنون مستعاری برایtyping.Unionاست که باعث تغییراتی در برخی رفتارها میشود. برای جزئیات بیشتر به بالا مراجعه کنید. (مشارکتشده توسط Jelle Zijlstra در gh-105499.)رفتار رانتایم حاشیهنویسیها به روشهای گوناگونی تغییر کرده است؛ برای جزئیات به بالا مراجعه کنید. اگرچه بیشتر کدهایی که با حاشیهنویسیها تعامل دارند باید همچنان کار کنند، ممکن است برخی جزئیات مستندنشده رفتار متفاوتی داشته باشند.
در راستای عمومی کردن رابط خط فرمان ماژول
mimetypes، این رابط اکنون در صورت شکست به جای0با1خارج میشود و در صورت نادرست بودن پارامترهای خط فرمان به جای1با2خارج میشود. پیامهای خطا اکنون به stderr چاپ میشوند.الگوی
\Bدر عبارت باقاعده اکنون هنگامی که بهعنوان کل الگو داده شود، با رشته خالی تطبیق میکند، که ممکن است باعث تغییرات رفتاری شود.در FreeBSD،
sys.platformدیگر شامل شماره نسخه اصلی نیست.
تغییرات در حاشیهنویسی (PEP 649 و PEP 749)¶
این بخش راهنمایی دربارهی تغییراتی ارائه میکند که ممکن است به دلیل تغییرات مرتبط با ارزیابی معوق حاشیهنویسیها، در حاشیهنویسیها یا در کد پایتون که با حاشیهنویسیها تعامل دارد یا آنها را دروننگری میکند، لازم باشند.
در اکثر موارد، کدی که در نسخههای قدیمیتر پایتون کار میکند، نیازی به هیچ تغییری نخواهد داشت.
پیامدها برای کد حاشیهنویسیشده¶
اگر در کد خود حاشیهنویسیها را تعریف میکنید (برای مثال، برای استفاده با یک بررسیگر نوع ایستا)، این تغییر احتمالاً بر شما تأثیری نمیگذارد: میتوانید حاشیهنویسیها را همچنان به همان شیوهای که در نسخههای قبلی پایتون مینوشتید بنویسید.
به احتمال زیاد میتوانید رشتههای داخل علامت نقلقول را از حاشیهنویسیها حذف کنید؛ این رشتهها اغلب برای ارجاعهای پیشرو به کار میروند. بهطور مشابه، اگر برای اجتناب از نوشتن رشتهها در حاشیهنویسیها از from __future__ import annotations استفاده میکنید، به احتمال زیاد میتوانید پس از آنکه فقط پایتون 3.14 و جدیدتر را پشتیبانی کنید، آن ایمپورت را حذف کنید. با این حال، اگر به کتابخانههای شخص ثالثی که حاشیهنویسیها را میخوانند تکیه دارید، ممکن است این کتابخانهها پیش از آنکه مطابق انتظار کار کنند، برای پشتیبانی از حاشیهنویسیهای بدون علامت نقلقول به تغییراتی نیاز داشته باشند.
پیامدها برای خوانندگان __annotations__¶
اگر کد شما ویژگی __annotations__ را از اشیاء میخواند، ممکن است بخواهید تغییراتی انجام دهید تا از کدهایی که به ارزیابی معوق حاشیهنویسیها تکیه دارند پشتیبانی کنید. برای مثال، ممکن است بخواهید از annotationlib.get_annotations() با قالب FORWARDREF استفاده کنید، همانطور که ماژول dataclasses اکنون انجام میدهد.
بستهی خارجی typing_extensions بکپورتهایی جزئی از برخی از قابلیتهای ماژول annotationlib — مانند enum Format و تابع get_annotations() — را فراهم میکند. از اینها میتوان برای نوشتن کد چندنسخهای (cross-version) که از رفتار جدید در پایتون 3.14 بهره میبرد، استفاده کرد.
from __future__ import annotations¶
در پایتون 3.7، PEP 563 دستور آیندهی from __future__ import annotations را معرفی کرد که همهی حاشیهنویسیها را به رشته تبدیل میکند.
با این حال، این دستور اکنون منسوخ شده است و انتظار میرود که در نسخهای آینده از پایتون حذف شود. این حذف تا پس از پایان عمر پایتون 3.13 در سال ۲۰۲۹ رخ نخواهد داد؛ پایتون 3.13 آخرین نسخهی پایتون بدون پشتیبانی از ارزیابی معوق حاشیهنویسیهاست.
در پایتون 3.14، رفتار کدی که از from __future__ import annotations استفاده میکند، بدون تغییر است.
تغییرات در API زبان C¶
Py_Finalize()اکنون تمام رشتههای درونیسازیشده را حذف میکند. این تغییر با هر افزونهی C که پس از فراخوانیPy_Finalize()یک رشتهی درونیسازیشده را نگه میدارد و سپس پس از فراخوانیPy_Initialize()دوباره استفاده میشود، ناسازگار به عقب است. هر مشکلی که از این رفتار ناشی شود، معمولاً در حین اجرای فراخوانی بعدیPy_Initialize()بر اثر دسترسی به حافظهی مقداردهینشده به فروپاشی منجر میشود. برای رفع مشکل، از یک پاکساز آدرس (address sanitizer) برای شناسایی هرگونه استفادهی پس از آزادسازی (use-after-free) ناشی از یک رشتهی درونیسازیشده استفاده کنید و آن را هنگام خاموششدن ماژول آزاد کنید. (مشارکتشده توسط Eddie Elizondo در gh-113601.)C API مربوط به شیءهای استثنای یونیکد اکنون در صورتی که آرگومان استثنای آن یک شیء
UnicodeErrorنباشد، یکTypeErrorایجاد میکند. (مشارکتشده توسط Bénédikt Tran در gh-127691.)
مفسر بهطور داخلی هنگام بارگذاری اشیاء بر روی پشتهی عملوندها، در صورت امکان با امانت گرفتن ارجاعها، از انجام برخی تغییرات شمارش ارجاع اجتناب میکند. این میتواند در مقایسه با نسخههای پیشین پایتون به مقادیر کوچکتر شمارش ارجاع منجر شود. توسعههای C API که مقدار
Py_REFCNT()برابر1را برای تعیین اینکه آیا یک آرگومان تابع توسط هیچ کد دیگری ارجاع نشده است بررسی میکردند، باید بهجای آن ازPyUnstable_Object_IsUniqueReferencedTemporary()بهعنوان جایگزینی ایمنتر استفاده کنند.توابع خصوصی ارتقا یافته به APIهای عمومی C:
_PyBytes_Join():PyBytes_Join()_PyLong_IsNegative():PyLong_IsNegative()_PyLong_IsPositive():PyLong_IsPositive()_PyLong_IsZero():PyLong_IsZero()_PyLong_Sign():PyLong_GetSign()_PyUnicodeWriter_Dealloc():PyUnicodeWriter_Discard()_PyUnicodeWriter_Finish():PyUnicodeWriter_Finish()_PyUnicodeWriter_Init(): ازPyUnicodeWriter_Create()استفاده کنید_PyUnicodeWriter_Prepare(): (بدون جایگزین)_PyUnicodeWriter_PrepareKind(): (بدون جایگزین)_PyUnicodeWriter_WriteChar():PyUnicodeWriter_WriteChar()_PyUnicodeWriter_WriteStr():PyUnicodeWriter_WriteStr()_PyUnicodeWriter_WriteSubstring():PyUnicodeWriter_WriteSubstring()_PyUnicode_EQ():PyUnicode_Equal()_PyUnicode_Equal():PyUnicode_Equal()_Py_GetConfig():PyConfig_Get()وPyConfig_GetInt()_Py_HashBytes():Py_HashBuffer()_Py_fopen_obj():Py_fopen()PyMutex_IsLocked():PyMutex_IsLocked()
میتوان از pythoncapi-compat project برای بهدست آوردن بیشتر این توابع جدید در پایتون 3.13 و نسخههای قدیمیتر استفاده کرد.
تغییرات قابل توجه در 3.14.1¶
توابع
PyUnstable_ThreadState_SetStackProtection()وPyUnstable_ThreadState_ResetStackProtection()برای تنظیم نشانی پایهی محافظت از پشته و اندازهی محافظت از پشتهی وضعیت یک نخ پایتون اضافه شدند. (مشارکتشده توسط Victor Stinner در gh-139653.)
تغییرات قابل توجه در 3.14.5¶
gc¶
زبالهروب افزایشی که در پایتون 3.14.0-3.14.4 عرضه شده بود، به دلیل تعدادی گزارش مبنی بر فشار حافظهی قابلتوجه در محیطهای عملیاتی، به زبالهروب نسلی نسخهی 3.13 بازگردانی شده است. برای جزئیات به زبالهروبی مراجعه کنید.