Python 3.11 programavimo kalbos išleidimas

Po metų plėtros buvo paskelbta reikšminga Python 3.11 programavimo kalbos versija. Naujasis filialas bus palaikomas pusantrų metų, o po to dar trejus su puse metų jam bus generuojami pataisymai pažeidžiamumui pašalinti.

Tuo pačiu metu prasidėjo Python 3.12 šakos alfa testavimas (pagal naują kūrimo grafiką naujos šakos darbas prasideda penkis mėnesius iki ankstesnės šakos išleidimo ir pasiekia alfa testavimo etapą iki kitos leidimo ). Python 3.12 atšaka bus alfa versija septynis mėnesius, per kuriuos bus pridėta naujų funkcijų ir ištaisytos klaidos. Po to beta versijos bus testuojamos tris mėnesius, per kuriuos bus draudžiama pridėti naujų funkcijų, o visas dėmesys bus skiriamas klaidų taisymui. Paskutinius du mėnesius iki išleidimo filialas bus kandidato išleidimo stadijoje, kurioje bus atliktas galutinis stabilizavimas.

Nauji Python 3.11 papildymai apima:

  • Buvo atliktas didelis darbas siekiant optimizuoti našumą. Naujoji šaka apima pakeitimus, susijusius su funkcijų iškvietimų pagreitinimu ir tiesioginiu diegimu, greitųjų standartinių operacijų interpretatorių naudojimu (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), taip pat optimizavimus, paruoštus Cinder ir HotPy projektų. Priklausomai nuo apkrovos tipo, kodo vykdymo greitis padidėja 10-60%. Vidutiniškai „pyperformance“ testų rinkinio našumas padidėjo 25%.

    Perdarytas baitinio kodo talpyklos mechanizmas, dėl kurio vertėjo paleidimo laikas sumažėjo 10-15%. Dabar objektus su kodu ir baitiniu kodu statiškai paskirsto interpretatorius, todėl buvo galima pašalinti iš talpyklos ištraukto baitinio kodo išskyrimo ir objektų konvertavimo su kodu, kad būtų galima patalpinti į dinaminę atmintį, etapus.

  • Rodant skambučių pėdsakus diagnostikos pranešimuose, dabar galima rodyti informaciją apie klaidą sukėlusią išraišką (anksčiau buvo paryškinta tik eilutė, nedetalizuojant, kuri eilutės dalis sukėlė klaidą). Išplėstinę sekimo informaciją taip pat galima gauti per API ir naudoti atskiroms baitinio kodo instrukcijoms susieti su konkrečia šaltinio kodo vieta naudojant codeobject.co_positions() metodą arba C API funkciją PyCode_Addr2Location(). Dėl pakeitimo daug lengviau derinti problemas, susijusias su įdėtais žodyno objektais, kelių funkcijų iškvietimais ir sudėtingomis aritmetinėmis išraiškomis. Traceback (paskutinis skambutis): failas "calculation.py", 54 eilutė, rezultatas = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: padalijimas iš nulio
  • Pridėtas išimčių grupių palaikymas, suteikiantis programai galimybę generuoti ir apdoroti kelias skirtingas išimtis vienu metu. Norint sugrupuoti kelias išimtis ir jas iškelti kartu, buvo pasiūlyti nauji išimčių tipai ExceptionGroup ir BaseExceptionGroup, o išraiška „išskyrus*“ buvo pridėta siekiant pabrėžti atskiras grupės išimtis.
  • Metodas add_note() buvo įtrauktas į klasę „BaseException“, leidžiančią prie išimties pridėti teksto pastabą, pavyzdžiui, pridėti kontekstinės informacijos, kuri nepasiekiama, kai išimtis išmesta.
  • Pridėtas specialus savęs tipas, atspindintis dabartinę privačią klasę. „Self“ gali būti naudojamas komentuoti metodus, kurie pateikia savo klasės egzempliorių paprastesniu būdu nei naudojant „TypeVar“. klasė MyLock: def __enter__(self) -> Self: self.lock() return self
  • Pridėtas specialus „LiteralString“ tipas, į kurį gali būti įtraukti tik su „LiteralString“ tipu suderinami eilučių literalai (t. y. tuščiosios ir „LiteralString“ eilutės, bet ne savavališkos ar kombinuotos stringos). Tipas „LiteralString“ gali būti naudojamas apriboti eilučių argumentų perdavimą funkcijoms, savavališką eilučių dalių pakeitimą, dėl kurio gali atsirasti pažeidžiamumų, pavyzdžiui, generuojant eilutes SQL užklausoms arba apvalkalo komandoms. def run_query(sql: LiteralString) -> ... ... def caller (savavališka_stringa: str, užklausos_stringa: LiteralString, lentelės_pavadinimas: LiteralString, ) -> None: run_query("SELECT * FROM student") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(savavališka_stringa) # Klaida run_query( # Klaida f"SELECT * FROM studentai WHERE name = {savavališka_string}" )
  • Pridėtas tipas TypeVarTuple, leidžiantis naudoti kintamųjų generinius duomenis, skirtingai nei TypeVar, kurie apima ne vieną tipą, o atsitiktinį skaičių tipų.
  • Standartinėje bibliotekoje yra modulis tomllib su TOML formato analizavimo funkcijomis.
  • Galima pažymėti atskirus spausdintų žodynų elementus (TypedDict) Required ir NotRequired etiketėmis, kad būtų galima nustatyti privalomus ir neprivalomus laukus (pagal numatytuosius nustatymus visi deklaruoti laukai yra būtini, jei bendras parametras nenustatytas į False). klasės filmas (TypedDict): pavadinimas: str metai: NotRequired[int] m1: Filmas = {"pavadinimas": "Juodoji pantera", "year": 2018} # OK m2: Filmas = {"pavadinimas": "Žvaigždžių karai" } # Gerai (metų laukas yra neprivalomas) m3: Filmas = {"year": 2022} # Klaida, neužpildytas privalomas pavadinimo laukas)
  • Klasė TaskGroup buvo įtraukta į asyncio modulį, įdiegus asinchroninį konteksto tvarkyklę, kuri laukia, kol bus atlikta užduočių grupė. Užduočių įtraukimas į grupę atliekamas naudojant create_task() metodą. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(kitas_coro(...)) print("Abi užduotys dabar baigtos .")
  • Pridėtas @dataclass_transform dekoratorius klasėms, metodams ir funkcijoms, kai nurodyta, statinio tipo tikrinimo sistema traktuoja objektą taip, lyg naudotų @dataclasses.dataclass dekoratorių. Žemiau pateiktame pavyzdyje CustomerModel klasė, tikrinant tipus, bus apdorojama panašiai kaip klasė su @dataclasses.dataclass dekoratoriumi, t.y. kaip turintis __init__ metodą, kuris priima id ir pavadinimo kintamuosius. @dataclass_transform() klasė ModelBase: ... klasė CustomerModel(ModelBase): id: int pavadinimas: str
  • Reguliariose išraiškose buvo pridėta galimybė naudoti atominį grupavimą ((?>...)) ir turimuosius kvantorius (*+, ++, ?+, {m,n}+).
  • Pridėta komandų eilutės parinktis „-P“ ir aplinkos kintamasis PYTHONSAFEPATH, kad būtų išjungtas automatinis galimai nesaugių failų kelių prie sys.path prijungimas.
  • „Windows“ platformai skirta „py.exe“ programa buvo žymiai patobulinta, pridėjus „-V:“ sintaksės palaikymą. / " be to "- . “
  • Daugelis C API makrokomandų konvertuojamos į įprastas arba statines eilutes funkcijas.
  • Moduliai uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ir sunau moduliai buvo nebenaudojami ir bus pašalinti iš Python 3.13 išleidimas. Pašalintos PyUnicode_Encode* funkcijos.

Šaltinis: opennet.ru

Добавить комментарий