Python 3.11 бағдарламалау тілінің шығарылымы

Бір жылдық дамудан кейін Python 3.11 бағдарламалау тілінің маңызды шығарылымы жарияланды. Жаңа филиалға бір жарым жыл қолдау көрсетіледі, содан кейін тағы үш жарым жыл бойы осалдықтарды жою үшін түзетулер жасалады.

Сонымен бірге Python 3.12 тармағының альфа тестілеуі басталды (жаңа әзірлеу кестесіне сәйкес, жаңа филиалдағы жұмыс алдыңғы филиалдың шығуына бес ай қалғанда басталып, келесі шығарылым уақытында альфа тестілеу кезеңіне жетеді) ). Python 3.12 тармағы жеті ай бойы альфа шығарылымында болады, оның барысында жаңа мүмкіндіктер қосылады және қателер түзетіледі. Осыдан кейін бета-нұсқалар үш ай бойы сынақтан өтеді, оның барысында жаңа мүмкіндіктерді қосуға тыйым салынады және қателерді түзетуге барлық назар аударылады. Шығаруға дейінгі соңғы екі ай ішінде филиал соңғы тұрақтандыру орындалатын шығарылым кандидаты сатысында болады.

Python 3.11-ге жаңа толықтырулар мыналарды қамтиды:

  • өнімділікті оңтайландыру бойынша айтарлықтай жұмыстар атқарылды. Жаңа тармақ функционалдық шақыруларды жеделдету және кірістірілген орналастыру, стандартты операциялардың жылдам интерпретаторларын пайдаланумен байланысты өзгерістерді қамтиды (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), сондай-ақ Cinder және HotPy жобаларымен дайындалған оңтайландырулар. Жүктеме түріне байланысты кодты орындау жылдамдығының 10-60% артуы байқалады. Орташа алғанда, pyperformance сынақ топтамасындағы өнімділік 25%-ға өсті.

    Байтекодты кэштеу механизмі қайта жасақталды, бұл интерпретатордың іске қосылу уақытын 10-15%-ға қысқартты. Код пен байт коды бар нысандар енді интерпретатормен статикалық түрде бөлінеді, бұл кэштен шығарылған байт кодты жою және динамикалық жадқа орналастырылатын кодпен объектілерді түрлендіру кезеңдерін жоюға мүмкіндік берді.

  • Диагностикалық хабарламаларда қоңырау іздерін көрсету кезінде енді қатені тудырған өрнек туралы ақпаратты көрсетуге болады (бұрын жолдың қай бөлігі қатені тудырғанын егжей-тегжейлі көрсетпей тек сызық ерекшеленетін). Сондай-ақ кеңейтілген бақылау ақпаратын API арқылы алуға және codeobject.co_positions() әдісі немесе C API функциясы PyCode_Addr2Location() арқылы бастапқы кодтағы белгілі бір орынға жеке байт код нұсқауларын салыстыру үшін пайдалануға болады. Өзгеріс кірістірілген сөздік нысандарымен, бірнеше функция шақыруларымен және күрделі арифметикалық өрнектермен проблемаларды түзетуді әлдеқайда жеңілдетеді. Бақылау (соңғы қоңырау): "calculation.py" файлы, 54-жол, нәтиже = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: нөлге бөлу
  • Бағдарламаға бірден бірнеше түрлі ерекшеліктерді жасау және өңдеу мүмкіндігін беретін ерекше жағдайлар топтарына қолдау қосылды. Бірнеше ерекшеліктерді топтау және оларды бірге көтеру үшін ExceptionGroup және BaseExceptionGroup жаңа ерекшелік түрлері ұсынылды және топтағы жеке ерекшеліктерді бөлектеу үшін «басқа*» өрнегі қосылды.
  • add_note() әдісі BaseException сыныбына қосылды, бұл ерекше жағдайға мәтіндік жазбаны тіркеуге мүмкіндік береді, мысалы, ерекшелік жойылған кезде қол жетімді емес мәтінмәндік ақпаратты қосу.
  • Ағымдағы жеке сыныпты көрсету үшін арнайы Self түрі қосылды. Self түрін TypeVar пайдаланудан гөрі өз класының данасын қайтаратын әдістерге түсініктеме беру үшін пайдалануға болады. сынып MyLock: def __enter__(self) -> Self: self.lock() өзін қайтарады
  • LiteralString түрімен үйлесімді жол литералдарын ғана қамтитын арнайы LiteralString түрі қосылды (яғни, бос және LiteralString жолдары, бірақ ерікті немесе біріктірілген str жолдары емес). LiteralString түрін функцияларға жол аргументтерін беруді шектеу, осалдықтарға әкелуі мүмкін жолдардың бөліктерін ерікті ауыстыру, мысалы, SQL сұраулары немесе қабық пәрмендері үшін жолдарды жасау кезінде пайдалануға болады. def run_query(sql: LiteralString) -> ... ... def шақырушы( ерікті_жол: str, сұрау_жолы: LiteralString, кесте_аты: LiteralString, ) -> Ешбірі: run_query("SELECT * FROM студенттер") # ok run_query(literal_string) # жарайды орындау_сұрауы( "ТАҢДАУ * FROM" + әріптік_жол) # ok іске_сұрау(еркін_жол) # Қате орындау_сұрау ( # Қате f"ТАҢДАУ * FROM студенттері WHERE атауы = {еркін_жол}" )
  • TypeVarTuple түрі қосылды, ол бір түрді емес, түрлердің ерікті санын қамтитын TypeVar түріне қарағанда айнымалы генериктерді пайдалануға мүмкіндік береді.
  • Стандартты кітапхана TOML пішімін талдауға арналған функциялары бар tomllib модулін қамтиды.
  • Міндетті және қосымша өрістерді анықтау үшін терілген сөздіктердің (TypedDict) жеке элементтерін Міндетті және Қажет емес белгілермен белгілеуге болады (әдепкі бойынша, жалпы параметр False мәніне орнатылмаған болса, барлық жарияланған өрістер қажет). class Movie(TypedDict): тақырыбы: str жылы: NotRequired[int] m1: Фильм = {"атауы": "Қара пантера", "жыл": 2018} # Жарайды m2: Фильм = {"атауы": "Жұлдызды соғыстар" } # Жарайды (жыл өрісі міндетті емес) m3: Фильм = {“жыл”: 2022} # Қате, қажетті тақырып өрісі толтырылмаған)
  • TaskGroup сыныбы тапсырмалар тобының аяқталуын күтетін асинхронды мәтінмәндік басқарушыны іске асыру арқылы асинцио модуліне қосылды. Топқа тапсырмалар қосу create_task() әдісі арқылы орындалады. async def main(): asyncio.TaskGroup() көмегімен tg ретінде синхрондау: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task( other_coro(...)) print("Екі тапсырма да қазір аяқталды. .")
  • Сыныптар, әдістер және функциялар үшін @dataclass_transform декораторы қосылды, көрсетілген кезде статикалық түрді тексеру жүйесі нысанды @dataclass.dataclass декораторын пайдаланатындай қарастырады. Төмендегі мысалда CustomerModel сыныбы типтерді тексеру кезінде @dataclasses.dataclass декораторы бар сыныпқа ұқсас өңделеді, яғни. id және атау айнымалы мәндерін қабылдайтын __init__ әдісі ретінде. @dataclass_transform() класы ModelBase: ... класс CustomerModel(ModelBase): идентификатор: int атауы: str
  • Тұрақты өрнектерде атомдық топтау ((?>...)) және иелік кванторларды (*+, ++, ?+, {m,n}+) қолдану мүмкіндігі қосылды.
  • «-P» пәрмен жолы опциясы және sys.path файлына ықтимал қауіпті файл жолдарын автоматты тіркеуді өшіру үшін PYTHONSAFEPATH ортасының айнымалы мәні қосылды.
  • Windows платформасына арналған py.exe утилитасы «-V:» синтаксисіне қолдау қосып, айтарлықтай жақсартылды. / « қосымша ретінде »- . "
  • C API ішіндегі көптеген макростар кәдімгі немесе статикалық кірістірілген функцияларға түрлендіріледі.
  • uu, cgi, құбырлар, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev және sunau модульдері ескірген және Python бағдарламасында жойылады. 3.13 шығарылым. PyUnicode_Encode* функциялары жойылды.

Ақпарат көзі: opennet.ru

пікір қалдыру