Нашри забони барномасозии 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, “latency” иҷозат дода мешавад. ”: l} барои аз луғат аз луғат арзишҳои “маҷрои фарохмаҷро” ва “таҳқирӣ” баровардан), зершаблонҳо (оператори ": =") баровардан, константаҳои номбаршударо дар қолаб истифода баред. Дар синфҳо, бо истифода аз усули "__match__()" рафтори мувофиқро танзим кардан мумкин аст.

    аз синфҳои додаҳо воридоти dataclass @dataclass class Нуқта: x: int y: int def whereis(нуқта): нуқтаи мувофиқат: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") парванда Нуқта(x, 0): чоп(f"X={x}") парванда Нуқта(): print("Дар ҷои дигар") парванда _: чоп("Нуқта нест") мувофиқат нуқта: ҳолат Нуқта(x, y) агар x == y: чоп (f"Y=X дар {x}") парванда Нуқта(x, y): чоп(f"На дар диагонал") СУРХ, САБЗ, КАБУД = 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, ^Хатои синтаксиси: '{' ҳеҷ гоҳ баста набуд

    Илова кардани паёмҳои хатогии махсуси синтаксиси: аломати ":" дар пеш аз блок ва дар луғатҳо, ҷудо нашудани навор бо қавс, вергул дар рӯйхатҳо, муайян кардани блоки "саниш" бидуни "ба истиснои" ва "ниҳоят", бо истифода аз "=" " ба ҷои "= =" дар муқоиса, нишон додани *-ифода дар сатри F. Илова бар ин, он кафолат медиҳад, ки тамоми ифодаи мушкилот таъкид карда мешавад, на танҳо ибтидо, ва иттилооти равшантар дар бораи контексти хатогиҳои марбут ба сатри нодуруст. >>> def foo(): ... агар lel: ... x = 2 Файл " ", сатри 3 x = 2 ^ IndentationError: пас аз изҳороти "агар" дар сатри 2 блоки бандшуда интизор буд

    Дар хатогиҳое, ки дар натиҷаи хатогиҳо дар номи атрибутҳо ва номҳои тағирёбанда дар функсия ба вуҷуд омадаанд, тавсия бо номи дуруст бароварда мешавад. >>>collections.namedtoplo Traceback (занги охирини охирин): Файл « ", хати 1, дар AttributeError: модули "маҷмӯаҳо" атрибути "namedtoplo" надорад. Оё шумо дар назар доштед: nametuple?

  • Барои абзорҳо ва профилаторҳо, рӯйдодҳои пайгирӣ бо рақамҳои дақиқи сатри коди иҷрошуда таъмин карда мешаванд.
  • Илова кардани танзимоти sys.flags.warn_default_encoding барои намоиш додани огоҳӣ дар бораи хатогиҳои эҳтимолии марбут ба TextIOWrapper ва коркарди файлҳои рамзгузоришудаи UTF-8 бидуни муайян кардани хосияти 'encoding=»utf-8″' (рамзгузории ASCII бо нобаёнӣ истифода мешавад) . Нашри нав инчунин қобилияти муайян кардани арзиши 'encoding="locale"' -ро барои муқаррар кардани рамзгузорӣ дар асоси маҳалли ҷорӣ таъмин мекунад.
  • Ба модули чопкунӣ оператори нав илова карда шуд, ки асбобҳоро барои муайян кардани эзоҳҳои тип таъмин мекунад ва ба шумо имкон медиҳад синтаксиси "X | Y" барои интихоби яке аз намудҳо (навъи X ё навъи Y). def квадрат (рақам: int | шино) -> 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 дарозтар аст
  • Функсияҳои нави дарунсохт aiter() ва anext() бо татбиқи аналогҳои асинхронӣ ба функсияҳои iter() ва next() пешниҳод карда мешаванд.
  • Кори конструкторҳои 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-ро илова карданд ва дастгирии версияҳои OpenSSL-ро аз 1.1.1 калонтар қатъ карданд.
  • Таҳлилгари кӯҳна хориҷ карда шуд, ки онро дар шохаи қаблӣ бо таҳлилгари PEG (Parsing Expression Grammar) иваз карда буд. Модули форматкунанда хориҷ карда шуд. Параметри давр аз API asyncio хориҷ карда шуд. Усулҳое, ки қаблан бекор карда шуда буданд, хориҷ карда шуданд. Функсияҳои Py_UNICODE_str*, ки сатрҳои Py_UNICODE*-ро идора мекунанд, хориҷ карда шуданд.
  • Модули distutils бекор карда шудааст ва барои нест кардан дар Python 3.12 ба нақша гирифта шудааст. Ба ҷои distutils, тавсия дода мешавад, ки модулҳои setuptools, бастабандӣ, платформа, shutil, subprocess ва sysconfig истифода шаванд. Сохтори wstr дар PyUnicodeObject бекор карда шудааст ва барои нест кардан ба нақша гирифта шудааст.

Манбаъ: opennet.ru

Илова Эзоҳ