پس از یک سال توسعه ارایه شده انتشار قابل توجه زبان برنامه نویسی پایتون 3.9. پایتون 3.9 اولین نسخه پس از آن بود انتقال پروژه در چرخه جدید آماده سازی و پشتیبانی از انتشار. نسخه های اصلی جدید اکنون سالی یک بار تولید می شوند و به روز رسانی های اصلاحی هر دو ماه یکبار منتشر می شوند. هر شعبه قابل توجهی به مدت یک سال و نیم پشتیبانی می شود و پس از آن سه سال و نیم دیگر برای رفع آسیب پذیری ها توسعه می یابد.
کار بر روی یک شعبه جدید اکنون پنج ماه قبل از انتشار شعبه بعدی آغاز می شود، یعنی. همزمان با انتشار پایتون 3.9 آغاز شد تست آلفا شاخه پایتون 3.10. شعبه Python 3.10 به مدت هفت ماه در آلفا منتشر خواهد شد و در طی آن ویژگیهای جدید اضافه شده و باگها برطرف میشوند. پس از این، نسخههای بتا به مدت سه ماه تست میشوند و در این مدت افزودن ویژگیهای جدید ممنوع و تمام توجه به رفع باگها معطوف خواهد شد. دو ماه آخر قبل از انتشار، شعبه در مرحله کاندید آزادی خواهد بود که در آن تثبیت نهایی انجام می شود.
در دیکشنری هایی که با استفاده از کلاس dict داخلی تعریف شده اند، ظاهر شد پشتیبانی از عملگرهای ادغام "|" و "|=" به روز رسانی، که مکمل روش های {**d1، **d2} و dict.update هستند که قبلا برای ادغام فرهنگ لغت ها پیشنهاد شده بود.
>>> x = {"key1": "value1 from x"، "key2": "value2 from x"}
>>> y = {"key2": "value2 from y"، "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | ایکس
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
مجموعه داخلی انواع شامل list، dict و tuple است که بدون وارد کردن از ماژول تایپ میتوان به عنوان انواع پایه استفاده کرد. آن ها به جای typing.List، typing.Dict و typing.Tuple اکنون می توانید مشخص کنید
فقط فهرست، دیکته و تاپیک:
def greet_all(names: list[str]) -> هیچ:
برای نام در اسامی:
چاپ ("سلام"، نام)
ارائه شده است ابزارهای انعطاف پذیر برای حاشیه نویسی توابع و متغیرها. برای پیوست کردن حاشیهنویسی، یک نوع Annotated جدید به ماژول تایپ اضافه شده است، که انواع موجود را با ابردادههای اضافی که میتوانند برای تحلیل استاتیک یا بهینهسازی زمان اجرا مورد استفاده قرار گیرند، گسترش میدهد. برای دسترسی به ابرداده از طریق کد، پارامتر include_extras به متد typing.get_type_hints() اضافه شده است.
کمرنگ شد الزامات دستوری برای دکوراتورها - هر عبارتی که برای استفاده در بلوکهای if و while مناسب است، اکنون میتواند به عنوان دکوراتور استفاده شود. این تغییر به طور قابل توجهی خوانایی کد PyQt5 را بهبود بخشید و نگهداری این ماژول را ساده کرد:
این بود:
button_0 = دکمه ها[0] @button_0.clicked.connect
حالا می توانید بنویسید:
@buttons[0].clicked.connect
به کتابخانه استاندارد اضافه ماژول zoneinfo، که شامل اطلاعات پایگاه داده منطقه زمانی IANA است.
>>> از zoneinfo واردات ZoneInfo
>>> از datetime import datetime, timedelta
>>> # زمان تابستان
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> چاپ (dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'
>>> # زمان استاندارد
>>> dt += زمان دلتا (روز = 7)
>>> چاپ (dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST
ماژول graphlib اضافه شد که در آن اجرا شد پشتیبانی از مرتبسازی توپولوژیکی نمودارها
پیشنهاد شده روش های جدید برای حذف پیشوندها و انتهای خط - str.removeprefix (پیشوند) و str.removesuffix (پسوند). متدها به اشیاء str، byte، bytearray و collections.UserString اضافه شده است.
>>> s = "FooBar"
>>> s.removeprefix("Foo")
'بار'
گرفتار تجزیه کننده جدید PEG (Parsing Expression Grammar) که جایگزین تجزیه کننده شد LL (1). استفاده از تجزیهکننده جدید خلاص شدن از شر برخی از "هکهای" مورد استفاده برای دور زدن محدودیتهای موجود در LL(1) را ممکن کرد و هزینههای نیروی کار برای نگهداری تجزیهکننده را بهطور قابلتوجهی کاهش داد. از نظر کارایی، تجزیه کننده جدید تقریباً در همان سطح قبلی است، اما از نظر انعطاف پذیری به طور قابل توجهی از آن جلوتر است که به شما امکان می دهد هنگام طراحی ویژگی های زبان جدید احساس آزادی بیشتری داشته باشید. کد تجزیه کننده قدیمی در حال حاضر حفظ شده است و می تواند با استفاده از پرچم "-X oldparser" یا متغیر محیطی "PYTHONOLDPARSER=1" برگردانده شود، اما در نسخه 3.10 حذف خواهد شد.
ارائه شده است توانایی روش های پسوند C برای دسترسی به وضعیت ماژول هایی که در آنها تعریف شده اند با استفاده از اشاره گر مستقیم به جای جستجوی وضعیت ماژول با استفاده از تابع PyState_FindModule. این تغییر به شما این امکان را می دهد که با کاهش یا حذف کامل سربار بررسی وضعیت ماژول، عملکرد ماژول های C را افزایش دهید. برای مرتبط کردن یک ماژول با یک کلاس، تابع C PyType_FromModuleAndSpec() پیشنهاد شده است، برای به دست آوردن ماژول و وضعیت آن، توابع C PyType_GetModule() و PyType_GetModuleState() پیشنهاد شده است، و برای ارائه روشی با دسترسی به کلاس پیشنهاد می شود. که در آن تعریف شده است، تابع C PyCMethod و پرچم METH_METHOD پیشنهاد شده است.
زباله روب تحویل داده شده از مجموعههای قفلشده حاوی اشیاء بازسازیشده که پس از اجرای نهاییکننده بهصورت خارجی در دسترس باقی میمانند.
روش اضافه شده os.pidfd_open، که به زیرسیستم هسته لینوکس "pidfd" اجازه می دهد تا برای مدیریت وضعیت استفاده مجدد PID استفاده شود (pidfd با یک فرآیند خاص مرتبط است و تغییر نمی کند، در حالی که یک PID می تواند پس از پایان فرآیند فعلی مرتبط با آن PID با فرآیند دیگری مرتبط شود. ).
پشتیبانی از مشخصات یونیکد به نسخه 13.0.0 به روز شده است.
حذف شد نشت حافظه هنگام راه اندازی مجدد مفسر پایتون در همان فرآیند.
عملکرد انواع داخلی، تاپل، مجموعه، منجمد، لیست و دیکت بهینه شده است. اجرا شد از طریق استفاده از پروتکل میانبر Vectorcall برای دسترسی سریعتر به اشیاء نوشته شده به زبان C.
ماژولهای _abc، audioop، _bz2، _codecs، _contextvars، _crypt، _functools، _json، _locale، عملگر، منبع، زمان و _weakref از اولیه سازی در چند مرحله.
ماژول های استاندارد کتابخانه audioop، ast، grp، _hashlib، pwd، _posixsubprocess، random، select، struct، termios و zlib به استفاده محدود تبدیل شده اند. ABI پایدار، که مشکل عملکرد مجموعه های ماژول های افزونه را برای نسخه های مختلف پایتون حل می کند (در هنگام به روز رسانی نسخه، نیازی به بازسازی ماژول های افزونه نیست و ماژول های کامپایل شده برای 3.9 می توانند در شاخه 3.10 کار کنند).
ماژول asyncio به دلیل مشکلات امنیتی احتمالی، پشتیبانی از پارامتر reuse_address را منسوخ کرده است (استفاده از SO_REUSEADDR برای UDP در لینوکس به فرآیندهای مختلف اجازه می دهد تا سوکت های گوش دادن را به یک پورت UDP متصل کنند).
بهینهسازیهای جدیدی اضافه شدهاند، بهعنوان مثال، بهبود عملکرد کنترلکنندههای سیگنال در برنامههای چند رشتهای، افزایش سرعت ماژول فرعی در محیط FreeBSD، و تخصیص سریعتر متغیرهای موقت (تخصیص یک متغیر در عبارت «for y در [expr ]” اکنون به اندازه عبارت “y = expr” است. به طور کلی اکثر تست ها نشان دادن کاهش عملکرد نسبت به شاخه 3.8 (سرعت فقط در تستهای write_local و write_deque مشاهده میشود):
حلقه زمان بندی:
حلقه_سربار 0.5 0.6 0.4 0.3 0.3 0.3
حذف شده بسیاری از توابع و متدهای Python 2.7 که قبلاً منسوخ شده بودند و منجر به هشدار Deprecation در نسخه قبلی شدند، از جمله متد unescape() در html.parser.HTMLParser،
tostring() و fromstring() در array.array، isAlive() در threading.Thread، getchildren() و getiterator() در ElementTree، sys.getcheckinterval()، sys.setcheckinterval()، asyncio.Task.current_task()، asyncio.Task.all_tasks()، base64.encodestring() و base64.decodestring().