Programmeeri keele Python 3.11 väljaanne

Pärast aasta möödumist arendustööst on välja antud märkimisväärne Python 3.11 programmeerimiskeele versioon. Uut haru toetatakse poolteist aastat, millele järgneb veel kolm ja pool aastat, mil selle jaoks süstitakse turvavigade parandusi.

Samaan ajal algas Python 3.12 haru alfa-testimine (vastavalt uuele arendusgraafikule algab töö uue haru kallal viis kuud enne eelmise haru väljaandmist ja selleks ajaks jõuab see alfa-testimise etappi). Python 3.12 haru jääb alfa-väljaannete staadiumisse seitsmeks kuuks, mille käigus lisatakse uusi funktsioone ning parandatakse vigu. Pärast seda toimub kolm kuud beetaversioonide testimist, millest uute funktsioonide lisamine on keelatud ning kogu tähelepanu suunatakse vigade parandamisele. Viimased kaks kuud enne väljaandmist on haru väljaandmise kandidaadi etapis, kus toimub lõplik stabiliseerimine.

Python 3.11 uutesse funktsioonidesse kuuluvad:

  • On tehtud märkimisväärne töö jõudluse optimeerimise nimel. Uude haru on lisatud muudatused, mis seotud funktsioonikutsumise kiirendamise ja inline-automaatimisega, tüübitehingute kiirete tõlgendajate rakendamisega (x+x, x*x, x-x, a[i], a[i] = z, f(arg), C(arg), o.method(), o.attr = z, *seq), samuti optimeerimistega, mis on ette valmistanud projektid Cinder ja HotPy. Koormuse tüübi järgi on täheldatud koodi käitamise kiirusetõusu 10-60%. Keskmiselt on jõudlus pyperformance testkomplekti läbimisel suurenenud 25%.

    Bytekoodi vahemälumehhanismi on ümber töödatud, mis võimaldas tõhustada tõlgendaja käivitusaega 10-15%. Koodiga ja bytekoodiga objektid paigutatakse nüüd tõlgendaja poolt staatiliselt, mis võimaldab kõrvaldada vahemälust extra bytekoodi demarshaldamise ja koodiga objektide muutmise etapid dünaamilise mälu jaoks.

  • Kutsungi jälgimisel on veateadetes tagatud teabe kuvamine väljendi kohta, mis põhjustas vea (varem ilmus vaid rida, ilma detailideta, milline osa just põhjustas vea). Laiendatud teavet jälgimise kohta saab ka läbi API ja kasutada spetsiifiliste baitkoodi juhiste vastavusse viimiseks algkoodi kindla positsiooniga, kasutades meetodit codeobject.co_positions() või C API funktsiooni PyCode_Addr2Location(). Muudatus muudab oluliselt lihtsamaks probleemide tõrkeotsingu, mis on seotud sõnastike sisemise objektiga, mitme funktsiooni kõne ja keeruliste aritmeetiliste väljenditega. Traceback (most recent call last): File «calculation.py», line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: jagamine nulliga
  • Lisatud on toetus erandigruppidele, mis annab programmile võimaluse genereerida ja töötleda korraga mitut erinevat erandit. Mitme erandi rühmitamiseks ja nende ühiseks kutsumiseks on pakutud uusi erandite tüüpe ExceptionGroup ja BaseExceptionGroup, ning erandite eristamiseks grupist on lisatud väljend „except*”.
  • Klassile BaseException on lisatud meetod add_note(), mis võimaldab lisada erandile tekstilist märkust, näiteks kontekstitähtsat teavet, mis pole erandi genereerimise ajal saadaval.
  • Lisatud on spetsiaalne tüüp Self, mis esindab praegust suletud klassi. Selfi saab kasutada selleks, et annotateerida meetodeid, mis tagastavad oma klassi eksemplari, seda tehes lihtsamal viisil kui TypeVar'i kasutamine. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Lisatud on spetsiaalne tüüp LiteralString, mis võib sisaldada ainult stringi kirjeldusi, mis on kooskõlas tüübiga LiteralString (st puhtad stringid ja stringid, mille tüüp on LiteralString, kuid mitte suvalised ja mitte kombineeritud stringid tüübiga str). Tüüpi LiteralString saab kasutada stringi argumentide edastamise piiramiseks, kus suvaline stringide osade asendamine võib viia haavatavusteni, näiteks SQL-päringute või shell-käskude loomisel. def run_query(sql: LiteralString) -> … … def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(«SELECT * FROM students») # hea run_query(literal_string) # hea run_query(«SELECT * FROM » + literal_string) # hea run_query(arbitrary_string) # Viga run_query( # Viga f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • Lisatud on tüüp TypeVarTuple, mis võimaldab kasutada variatiivseid geneerikaid, erinevalt TypeVar-st, mis katab mitte ühe tüübi, vaid suvalise arvu tüüpe.
  • Standardraamatukokku on lisatud moodul tomllib, mis sisaldab funktsioone TOML formaadi tõlgendamiseks.
  • Pakutakse võimalust tähistada individuaalseid elemente tüübiga sõnastikes (TypedDict) märgistega Required ja NotRequired, et määrata kohustuslikud ja mitte kohustuslikud väljad (vaikimisi on kõik deklareeritud väljad kohustuslikud, kui parameetrit total ei ole seatud väärtusele False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {«title»: «Black Panther», «year»: 2018} # HEA m2: Movie = {«title»: «Star Wars»} # HEA (välja year ei ole kohustuslik) m3: Movie = {«year»: 2022} # Viga, kohustuslik välja title ei ole täidetud)
  • Moodulisse asyncio on lisatud klass TaskGroup, mis rakendab asünkroonset konteksti haldurit, mis ootab grupi ülesannete lõpetamist. Ülesannete lisamine rühma toimub meetodi create_task() abil. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print(«Mõlemad ülesanded on nüüd lõpule viidud.»)
  • Lisatud on dekoorija klassidele, meetoditele ja funktsioonidele @dataclass_transform, mille määramisel tõlgendab staatilise tüübi kontrollimise süsteem objekti, nagu oleks kasutatud dekoorijat @dataclasses.dataclass. Allolevas näites klassi CustomerModel tüübi kontrollimisel töödeldakse sarnaselt klassile, millel on dekoorija @dataclasses.dataclass, st nagu oleks sellel meetod __init__, mis aktsepteerib muutujaid id ja name. @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • Regulaarsetes väljendites on lisatud võimalus kasutada aatomgroupingut ((?>…)) ja reetmine (possessive) kvantifikaatoreid (*+, ++, ?+, {m,n}+).
  • Lisatud käskude rida valik "-P" ja keskkonnamuutuja PYTHONSAFEPATH automaatse süsteemiteele (sys.path) potentsiaalselt ohtlike failiteede lisamise keelamiseks.
  • Oluliselt on parandatud py.exe utiliiti Windowsi platvormil, kus on rakendatud toetust süntaksile "-V:\" lisaks "-.".
  • Paljud makrod C API-s on muudetud tavaliseks või staatiliseks inline-funktsiooniks.
  • Moodulid uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ja sunau on kuulutatud vananenuks ja need eemaldatakse Python 3.13 versioonis. Funktsioonid PyUnicode_Encode* on eemaldatud.

Allikas: opennet.ru

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster