Бір жылдық дамудан кейін ұсынылды маңызды бағдарламалау тілінің шығарылымы Python 3.9. Python 3.9 кейінгі бірінші шығарылым болды көшу бойынша жоба жаңа цикл шығарылымдарды дайындау және қолдау. Жаңа негізгі шығарылымдар енді жылына бір рет жасалады, ал түзету жаңартулары екі ай сайын шығарылады. Әрбір маңызды салаға бір жарым жыл қолдау көрсетіледі, содан кейін осалдықтарды түзету үшін тағы үш жарым жыл әзірленеді.
Жаңа филиал бойынша жұмыс енді келесі филиалдың шығуына бес ай қалғанда басталады, яғни. Python 3.9 шығарылымымен сәйкес келеді басталды Python 3.10 филиалының альфа тестілеуі. Python 3.10 тармағы жеті ай бойы альфа шығарылымында болады, оның барысында жаңа мүмкіндіктер қосылады және қателер түзетіледі. Осыдан кейін бета-нұсқалар үш ай бойы сыналады, оның барысында жаңа мүмкіндіктерді қосуға тыйым салынады және қателерді түзетуге барлық назар аударылады. Шығаруға дейінгі соңғы екі айда филиал шығаруға үміткер сатысында болады, онда түпкілікті тұрақтандыру орындалады.
Кірістірілген dict класы арқылы анықталған сөздіктерде, пайда болды «|» біріктіру операторларына қолдау көрсету және сөздіктерді біріктіру үшін бұрын ұсынылған {**d1, **d2} және dict.update әдістерін толықтыратын "|=" жаңартулары.
>>> x = {"1-кілт": "x-дан 1-мән", "кілт2": "x-тен 2-мән"}
>>> y = {"кілт2": "y-ден 2-мән", "3-кілт": "y-ден 3-мән"}
>>> x | ж
{'1-кілт': 'x-дан 1-мән', 'кілт2': 'y-дан 2-мән', '3-кілт': 'y-дан 3-мән'}
>>> ж | x
{'кілт2': 'x-дан 2-мән', '3-кілт': 'y-дан 3-мән', 'кілт1': 'x-дан 1-мән'}
Кірістірілген түрлер жиыны теру модулінен импорттаусыз негізгі түрлер ретінде пайдалануға болатын тізім, дикт және кортежді қамтиды. Анау. typing.List, typing.Dict және typing.Tuple орнына енді көрсетуге болады.
жай ғана тізім, дикт және кортеж:
def greet_all(аттар: тізім[str]) -> Ешбірі:
есімдердегі атаулар үшін:
басып шығару («Сәлеметсіз бе», аты)
қамтамасыз етілген функциялар мен айнымалыларды аннотациялауға арналған икемді құралдар. Аннотацияларды тіркеу үшін теру модуліне жаңа Аннотацияланған түрі қосылды, ол бар түрлерді статикалық талдау үшін немесе орындау уақытын оңтайландыру үшін пайдалануға болатын қосымша метадеректермен кеңейтеді. Кодтан метадеректерге қол жеткізу үшін include_extras параметрі typing.get_type_hints() әдісіне қосылды.
Тоналды Декораторларға қойылатын грамматикалық талаптар – if және while блоктарында қолдануға жарамды кез келген өрнек енді декоратор ретінде пайдаланылуы мүмкін. Өзгеріс PyQt5 кодының оқылуын айтарлықтай жақсартты және осы модульге техникалық қызмет көрсетуді жеңілдетеді:
>>> dt.tzname()
'ТЫНЫҚ МҰХИТЫНДАҒЫ ОҢТҮСТІК АМЕРИКА ЖАЗҒЫ УАҚЫТЫ'
>>> # Стандартты уақыт
>>> dt += timedelta(күн=7)
>>> басып шығару(dt)
2020-11-07 12:00:00-08:00
>>> басып шығару(dt.tzname())
PST
graphlib модулі қосылды, онда жүзеге асырылды графиктерді топологиялық сұрыптауды қолдау.
Ұсынылған префикстер мен жол соңын жоюдың жаңа әдістері - str.removeprefix(prefix) және str.removesuffix(suffix). Әдістер str, байт, байт массиві және коллекцияларға қосылды.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, бұл Linux ядросының "pidfd" ішкі жүйесін PID қайта пайдалану жағдайын өңдеу үшін пайдалануға мүмкіндік береді (pidfd белгілі бір процесспен байланысты және өзгермейді, ал PID сол PID-мен байланысты ағымдағы процесс аяқталғаннан кейін басқа процесспен байланыстырылуы мүмкін. ).
Юникод спецификациясын қолдау 13.0.0 нұсқасына жаңартылды.
Жойылған жадтың ағуы сол процесте Python аудармашысын қайта инициализациялау кезінде.
Кірістірілген түрлер ауқымы, кортеж, жиын, мұздатылған жиын, тізім және dict өнімділігі оңтайландырылған. жүзеге асырылды Си тілінде жазылған нысандарға жылдам қол жеткізу үшін Vectorcall таңбаша хаттамасын пайдалану арқылы.
_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, оператор, ресурс, уақыт және _weakref модульдері мына жерден жүктеледі бірнеше кезеңде инициализациялау.
Стандартты кітапхана модульдері audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios және zlib шектелген пайдалану үшін түрлендірілді. тұрақты ABI, бұл Python-ның әртүрлі нұсқалары үшін кеңейтім модульдерінің жинақтарының жұмыс қабілеттілігі мәселесін шешеді (нұсқаны жаңарту кезінде кеңейтім модульдерін қайта құрудың қажеті жоқ, ал 3.9 үшін құрастырылған модульдер 3.10 тармағында жұмыс істей алады).
Әлеуетті қауіпсіздік мәселелеріне байланысты асинсио модулі reuse_address параметріне қолдау көрсетуді ескірген (Linux жүйесінде UDP үшін SO_REUSEADDR пайдалану әртүрлі процестерге тыңдау ұяшықтарын UDP портына қосуға мүмкіндік береді).
Жаңа оңтайландырулар қосылды, мысалы, көп ағынды қолданбалардағы сигнал өңдеушілердің жақсартылған өнімділігі, FreeBSD ортасындағы ішкі процесс модулінің жылдамдығының жоғарылауы және уақытша айнымалыларды жылдамырақ тағайындау ([expr ]” енді “y = expr” “) өрнегі сияқты орындалады. Жалпы, көптеген сынақтар шоу 3.8 тармақпен салыстырғанда өнімділіктің төмендеуі (жылдамдық тек write_local және write_deque сынақтарында байқалады):
Жойылған html.parser.HTMLParser ішіндегі unescape() әдісін қоса, алдыңғы шығарылымда ескірген және DeprecationWarning әкелген көптеген Python 2.7 функциялары мен әдістері,
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().