Објавување на програмскиот јазик Python 3.10

По една година развој, претставено е значајното издание на програмскиот јазик Python 3.10. Новата филијала ќе биде поддржана една и пол година, по што за уште три и пол години ќе се генерираат поправки за да се отстранат пропустите.

Во исто време, започна алфа тестирањето на гранката Python 3.11 (во согласност со новиот распоред за развој, работата на нова гранка започнува пет месеци пред објавувањето на претходната гранка и достигнува фаза на алфа тестирање до следното издание ). Филијалата на Python 3.11 ќе биде во алфа издание седум месеци, за време на кои ќе бидат додадени нови функции и ќе се поправат грешките. По ова, бета верзиите ќе се тестираат три месеци, при што ќе биде забрането додавање на нови функции и целото внимание ќе се посвети на поправка на грешки. Последните два месеца пред пуштањето, гранката ќе биде во фаза кандидат за ослободување, на која ќе се изврши финална стабилизација.

Новите дополнувања на Python 3.10 вклучуваат:

  • Имплементирани оператори „совпаѓање“ и „случај“ за совпаѓање на шаблони, кои ја подобруваат читливоста на кодот, го поедноставуваат совпаѓањето на произволните објекти на Python и ја зголемуваат веродостојноста на кодот преку напредна проверка на статички тип. Имплементацијата е многу слична на операторот „совпаѓање“ обезбеден во Scala, Rust и F#, кој го споредува резултатот од одреден израз со листа на обрасци наведени во блокови врз основа на операторот „случај“.

    def http_error(status): одговара статус: случај 400: врати „Лошо барање“ случај 401|403|404: врати „Не е дозволено“ случај 418: врати „Јас сум чајник“ случај _: врати „Нешто друго“

    Можете да отпакувате објекти, торки, списоци и произволни секвенци за да ги врзувате променливите врз основа на постоечките вредности. Дозволено е да се дефинираат вгнездени шаблони, да се користат дополнителни услови „ако“ во шаблонот, да се користат маски („[x, y, *rest]“), мапирања на клучеви/вредности (на пример, {„пропусен опсег“: b, „латентност ”: l} за да се извлечат вредностите „пропусен опсег“ и „латентност“ од речник), да се извлечат подшаблони („:=" оператор), да се користат именувани константи во шаблон. Во класите, можно е да се приспособи однесувањето за совпаѓање користејќи го методот „__match__()“.

    од податочни класи увезуваат податочна класа @dataclass класа Точка: x: int y: int def каде што (точка): точка на совпаѓање: случај Точка(0, 0): print("Потекло") случај Точка(0, y): печати(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Некаде на друго место") case _: print("Not a point") одговара точка: случај Точка(x, y) ако x == y: печатење(f"Y=X на {x}") случај Точка(x, y): печатење(f"Не на дијагоналата") ЦРВЕНО, ЗЕЛЕНО, СИНО = 0, 1, 2 совпаѓање боја: буква ЦРВЕНА: печатење („Гледам црвено!“) букви ЗЕЛЕНА: печатење („Тревата е зелена“) буква СИНА: печатење („Го чувствувам блузот :(“)

  • Сега е можно да се користат загради во изјавата со за да се подели дефиницијата за збирка контекстуални менаџери низ повеќе линии. Дозволено е да се остави и запирка по последниот менаџер на контекст во групата: со ( 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, ^Грешка во синтаксата: „{“ никогаш не бил затворен

    Додадени се дополнителни специјализирани пораки за синтаксичка грешка: недостасува симбол „:“ пред блок и во речници, не одвојување торка со загради, промашување запирка во списоците, наведување блок „пробај“ без „освен“ и „конечно“, користејќи „= " наместо "= =" во споредбите, наведувајќи *-изрази во f-стрингови. Дополнително, осигурува дека е означен целиот проблематичен израз, а не само почетокот, и поексплицитни информации за контекстот на грешките поврзани со неправилно вовлекување. >>> def foo(): ... ако lel: ... x = 2 датотека " ", линија 3 x = 2 ^ IndentationError: се очекува вовлечен блок по изјавата „ако“ во редот 2

    Во грешките предизвикани од печатни грешки во имињата на атрибутите и имињата на променливите во функцијата, излегува препорака со точното име. >>>collections.namedtoplo Traceback (последниот повик последен): Датотека « “, линија 1, во AttributeError: модулот „колекции“ нема атрибут „namedtoplo“. Дали сакаше да кажеш: namedtuple?

  • За алатките за дебагирање и профилите, настаните за следење се обезбедени со точните броеви на линиите на извршениот код.
  • Додадена е поставка sys.flags.warn_default_encoding за прикажување на предупредување за потенцијални грешки поврзани со TextIOWrapper и open() за обработка на UTF-8 кодирани датотеки без експлицитно специфицирање на опцијата „encoding=»utf-8“ (кодирањето ASCII се користи стандардно). Новото издание, исто така, обезбедува можност да се определи вредност „енкодирање=локале“ за да се постави кодирањето врз основа на моменталната локација.
  • Додаден е нов оператор во модулот за пишување, кој обезбедува алатки за одредување на прибелешки за типот, што овозможува користење на синтаксата „X | Y" за да изберете еден од типовите (тип X или тип Y). деф квадрат (број: 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), строг=точно)) [('a', 1), ('b', 2) , ('c', 3)] >>> листа(zip(опсег(3), ['наплата', 'fi', 'fo', 'fum'], strict=True)) Следење (последниот повик последен ): … ValueError: zip() аргументот 2 е подолг од аргументот 1
  • Новите вградени функции aiter() и anext() се предложени со имплементација на асинхрони аналози на функциите iter() и next().
  • Работата на конструкторите str(), bytes() и bytearray() при работа со мали објекти е забрзана за 30-40%.
  • Го намали бројот на операции за увоз во модулот за исклучување. Командата „python3 -m module_name“ сега работи во просек 1.4 пати побрзо поради намалувањето на увезените модули од 69 на 51.
  • Инструкцијата LOAD_ATTR користи механизам за кеширање за поединечни оптички кодови, што овозможи да се забрза работата со редовни атрибути до 36%, а со слотови до 44%.
  • Кога се гради Python со опцијата „--enable-optimizations“, сега е овозможен режимот „-fno-semantic-interposition“, што овозможува забрзување на толкувачот до 30% во споредба со градењето со „--enable-shared “ опција.
  • Модулите хашлиб и ssl додадоа поддршка за OpenSSL 3.0.0 и престанаа да поддржуваат OpenSSL верзии постари од 1.1.1.
  • Стариот парсер е отстранет, кој во претходната гранка беше заменет со парсерот PEG (Parsing Expression Grammar). Модулот за форматер е отстранет. Параметарот на јамката е отстранет од asyncio API. Методите што претходно беа застарени се отстранети. Функциите Py_UNICODE_str* кои манипулираат со низи Py_UNICODE* се отстранети.
  • Модулот distutils е застарен и е закажан за отстранување во Python 3.12. Наместо distutils, се препорачува да се користат модулите за поставување, пакување, платформа, shutil, подпроцес и sysconfig. Структурата wstr во PyUnicodeObject е застарена и закажана за отстранување.

Извор: opennet.ru

Додадете коментар