Нашри забони барномасозии 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 соддатар баргардонанд. class MyLock: def __enter__(self) -> Self: self.lock() худ баргардонад
  • Навъи махсуси LiteralString илова карда шуд, ки танҳо метавонад литералҳои сатриро дар бар гирад, ки бо навъи LiteralString мувофиқанд (яъне сатрҳои холӣ ва LiteralString, вале на сатрҳои str ихтиёрӣ ё омехта). Навъи LiteralString метавонад барои маҳдуд кардани интиқоли аргументҳои сатр ба функсияҳо, ивазкунии худсаронаи қисмҳои сатрҳо, ки дар он метавонад боиси осебпазирӣ гардад, масалан, ҳангоми тавлиди сатрҳо барои дархостҳои SQL ё фармонҳои қабати. def run_query(sql: LiteralString) -> ... ... def caller(arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Ҳеҷ: run_query("SELECT * FROM student") # ok run_query(literal_string) # OK run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Хатои run_query( # Хатои f"SELECT * FROM донишҷӯён КУҶО ном = {сари_сатр}")
  • Навъи TypeVarTuple илова карда шудааст, ки имкон медиҳад истифодаи генерикҳои тағирёбанда, бар хилофи TypeVar, ки на як намуд, балки шумораи ихтиёрии намудҳоро дар бар мегирад.
  • Китобхонаи стандартӣ модули tomllib-ро бо функсияҳои таҳлили формати TOML дар бар мегирад.
  • Барои муайян кардани майдонҳои ҳатмӣ ва ихтиёрӣ, унсурҳои алоҳидаи луғатҳои чопшуда (TypedDict)-ро бо тамғакоғазҳои зарурӣ ва ғайриталабӣ қайд кардан мумкин аст (бо нобаёнӣ, ҳамаи майдонҳои эълоншуда талаб карда мешаванд, агар параметри умумӣ ба False муқаррар карда нашавад). Синфи Филм(TypedDict): унвон: str сол: NotRequired[int] m1: Филм = {"унвон": "Блэк Пантера", "сол": 2018} # OK m2: Филм = {"унвон": "Ҷангҳои Ситора" } # Хуб (майдони сол ихтиёрӣ аст) m3: Филм = {“сол”: 2022} # Хато, майдони сарлавҳаи зарурӣ пур карда нашудааст)
  • Синфи TaskGroup ба модули асинсио бо татбиқи менеҷери контексти асинхронӣ, ки интизори анҷоми як гурӯҳи вазифаҳост, илова карда шудааст. Илова кардани вазифаҳо ба гурӯҳ бо истифода аз усули create_task() анҷом дода мешавад. async def main(): асинхронӣ бо asyncio.TaskGroup() ҳамчун tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(diger_coro(...)) print("Ҳарду вазифа ҳоло иҷро шуданд .")
  • Илова кардани ороишгари @dataclass_transform барои синфҳо, усулҳо ва функсияҳо, вақте ки муайян карда мешавад, системаи тафтиши навъи статикӣ ба объект гӯё бо истифода аз ороишгари @dataclass.dataclass муносибат мекунад. Дар мисоли зер, синфи CustomerModel ҳангоми санҷиши намудҳо ба синф бо ороишгари @dataclasses.dataclass монанд коркард карда мешавад, яъне. ҳамчун дорои усули __init__, ки тағирёбандаҳои id ва номро қабул мекунад. @dataclass_transform() синфи ModelBase: … class CustomerModel(ModelBase): id: номи int: str
  • Дар ибораҳои муқаррарӣ қобилияти истифодаи гурӯҳбандии атомӣ ((?>...)) ва миқдорҳои соҳибӣ (*+, ++, ?+, {m,n}+) илова карда шудааст.
  • Опсияи сатри фармони "-P" ва тағирёбандаи муҳити PYTHONSAFEPATH барои ғайрифаъол кардани замимаи худкори роҳҳои файли эҳтимолан хатарнок ба sys.path илова карда шуд.
  • Утилитаи py.exe барои платформаи Windows ба таври назаррас такмил дода, дастгирии синтаксиси "-V:" -ро илова кард. / " илова бар "- . "
  • Бисёр макросҳо дар API C ба функсияҳои муқаррарӣ ё статикӣ табдил дода мешаванд.
  • Модулҳои 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

Илова Эзоҳ