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

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

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

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

  • Үлгіні сәйкестендіруге арналған "сәйкестендіру" және "жағдай" операторлары енгізілді, олар кодты оқу мүмкіндігін жақсартады, еркін Python нысандарының сәйкестігін жеңілдетеді және кеңейтілген статикалық типті тексеру арқылы код сенімділігін арттырады. Іске асыру Scala, Rust және F# нұсқаларында берілген "сәйкестік" операторына ұқсайды, ол көрсетілген өрнектің нәтижесін "case" операторына негізделген блоктарда тізімделген үлгілер тізімімен салыстырады.

    def http_error(status): сәйкестік күйі: жағдай 400: қайтару «Жаман сұрау» жағдайы 401|403|404: қайтару «Рұқсат етілмейді» жағдайы 418: «Мен шәйнекпін» жағдайын қайтару _: «Басқа бірдеңені» қайтару

    Бар мәндерге негізделген айнымалы мәндерді байланыстыру үшін нысандарды, кортеждерді, тізімдерді және ерікті реттерді орамнан шығаруға болады. Кірістірілген үлгілерді анықтауға, үлгіде қосымша «егер» шарттарын қолдануға, маскаларды («[x, y, *rest]»), кілт/мәнді салыстыруға (мысалы, {«өткізу жолағы»: b, «кідіріс») рұқсат етіледі. ”: l} сөздіктен "өткізу жолағы" және "кідіріс" мәндерін шығару үшін, ішкі үлгілерді (":=" операторы) шығарып алыңыз, үлгідегі атаулы тұрақтыларды пайдаланыңыз. Сыныптарда «__match__()» әдісі арқылы сәйкес әрекетті теңшеуге болады.

    деректер кластарынан импорттау деректер класы @dataclass сынып Нүкте: x: int y: int def whereis(нүкте): сәйкестік нүктесі: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") жағдай Point(x, 0): print(f"X={x}") case Point(): print("Somewhere another") case _: print("Нүкте емес") сәйкестік нүкте: жағдай Point(x, y) егер x == y: print(f"Y=X at {x}") регистр Нүкте(x, y): print(f"Diagonal бойынша емес") ҚЫЗЫЛ, ЖАСЫЛ, КӨК = 0, 1, 2 сәйкес түсті: регистр ҚЫЗЫЛ: басып шығару («Мен қызылды көріп тұрмын!») регистр ЖАСЫЛ: басып шығару («Шөп жасыл») регистр КӨК: басып шығару («Мен көк түсті сезінемін :(«)

  • Енді контекстік басқарушылар жиынының анықтамасын бірнеше жолға бөлу үшін with операторында жақшаларды пайдалануға болады. Сондай-ақ, топтағы соңғы контекстік басқарушыдан кейін үтір қалдыруға рұқсат етіледі: ( CtxManager1() мысал1, CtxManager2() мысал2, CtxManager3() мысал3, ): ...
  • Жол литералдарындағы жабылмаған жақшалар мен тырнақшаларға қатысты қателердің код орны туралы есеп беру жақсартылған. Мысалы, жабылмаған жақша болған кезде, келесі құрылымдағы синтаксистік қате туралы хабарлаудың орнына, көрсеткіш енді ашылатын жақшаны бөлектейді және жабу блогы жоқ екенін көрсетеді. "example.py" файлы, күтілетін 1-жол = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ешқашан жабылмаған

    Қосымша мамандандырылған синтаксистік қате туралы хабарлар қосылды: блоктың алдында және сөздіктерде «:» таңбасының болмауы, кортежді жақшамен бөлмеу, тізімдерде үтірдің болмауы, «басқа» және «соңында» жоқ «көріп көру» блогын көрсету, «=» пайдалану Салыстырудағы "= =" орнына " f-жолдарындағы *-өрнектерді көрсету. Бұған қоса, ол тек басы ғана емес, бүкіл проблемалық өрнектің бөлектелуін қамтамасыз етеді және қате шегініспен байланысты қателер контексті туралы нақтырақ ақпарат береді. >>> def foo(): ... егер lel: ... x = 2 Файл " ", 3-жол x = 2 ^ IndentationError: 2-жолдағы 'if' операторынан кейін шегініс блогы күтілді

    Функциядағы атрибуттар мен айнымалы атауларындағы теру қателерінен туындаған қателерде дұрыс атауы бар ұсыныс шығады. >>>collections.namedtoplo Traceback (соңғы қоңырау): Файл « ", 1-жол, в AttributeError: «жинақтар» модулінде «namedtoplo» төлсипаты жоқ. Сіз мынаны білдірдіңіз бе: nametuple?

  • Түзету құралдары мен профильдеушілер үшін бақылау оқиғалары орындалған кодтың нақты жол нөмірлерімен қамтамасыз етіледі.
  • TextIOWrapper және open() арқылы UTF-8 кодталған файлдарын "encoding=»utf-8"» опциясын нақты көрсетпей өңдеумен байланысты ықтимал қателер туралы ескертуді көрсету үшін sys.flags.warn_default_encoding параметрі қосылды (ASCII кодтау әдепкі бойынша пайдаланылады) . Жаңа шығарылым сонымен қатар ағымдағы тілге негізделген кодтауды орнату үшін 'encoding="locale"' мәнін көрсету мүмкіндігін береді.
  • Теру модуліне жаңа оператор қосылды, ол «X | Түрлердің бірін таңдау үшін Y» түймесін басыңыз (X түрі немесе Y түрі). def квадрат(сан: int | float) -> int | float: қайтару саны ** 2 бұрын қолдау көрсетілетін құрылымға баламалы: def square(сан: Union[int, float]) -> Union[int, float]: қайтару нөмірі ** 2
  • Теру модуліне Concatenate операторы және ParamSpec айнымалысы қосылды, бұл Callable пайдаланған кезде статикалық типті тексеру үшін қосымша ақпаратты беруге мүмкіндік береді. Теру модулі сонымен қатар типті қорғау функцияларына түсініктеме беру үшін TypeGuard арнайы мәндерін және түр бүркеншік атын анық анықтау үшін TypeAlias ​​қосады. StrCache: TypeAlias ​​= 'Кэш[str]' # түр бүркеншік ат
  • zip() функциясы қосымша «қатаң» жалаушаны жүзеге асырады, ол көрсетілген кезде қайталанатын аргументтердің ұзындығы бірдей екенін тексереді. >>> тізім(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> тізім(zip(ауқым(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Бақылау (ең соңғы қоңырау ): … ValueError: zip() 2 аргументі 1 аргументтен ұзағырақ
  • iter() және next() функцияларына асинхронды аналогтарды енгізу арқылы жаңа кірістірілген aiter() және anext() функциялары ұсынылады.
  • Шағын объектілермен жұмыс істеу кезінде str(), bytes() және bytearray() конструкторларының жұмысы 30-40%-ға жылдамдады.
  • Runpy модуліндегі импорттау операцияларының санын азайтты. «python3 -m module_name» пәрмені енді импортталған модульдердің 1.4-дан 69-ге дейін қысқаруына байланысты орта есеппен 51 есе жылдам жұмыс істейді.
  • LOAD_ATTR нұсқауы жеке опкодтар үшін кэштеу механизмін пайдаланады, бұл қалыпты атрибуттармен жұмысты 36%-ға, ал слоттармен 44%-ға дейін жылдамдатуға мүмкіндік берді.
  • Python-ды «--enable-optimizations» опциясымен құрастырған кезде «-fno-semantic-interposition» режимі енді қосылды, ол «-enable-shared» параметрімен құрумен салыстырғанда аудармашыны 30%-ға дейін жылдамдатуға мүмкіндік береді. ” опциясы.
  • Hashlib және ssl модульдері OpenSSL 3.0.0 қолдауын қосты және 1.1.1 нұсқасынан ескі OpenSSL нұсқаларына қолдау көрсетуді тоқтатты.
  • Ескі талдаушы жойылды, ол алдыңғы тармақта PEG (Parsing Expression Grammar) талдаушысымен ауыстырылды. Пішімдеу модулі жойылды. Цикл параметрі асинцио API-ден жойылды. Бұрын ескірген әдістер жойылды. Py_UNICODE* жолдарын басқаратын Py_UNICODE_str* функциялары жойылды.
  • distutils модулі ескірген және оны Python 3.12 нұсқасында жою жоспарланған. Distutils орнына орнату құралдарын, орауыштарды, платформаны, shutil, қосалқы процесс және жүйені орнату модульдерін пайдалану ұсынылады. PyUnicodeObject ішіндегі wstr құрылымы ескірген және жоюға жоспарланған.

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

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