Izdanje programskog jezika Python 3.8

Nakon godinu i pol razvoja predstavio glavno izdanje programskog jezika Python 3.8. Ispravna ažuriranja za granu Python 3.8 planirano puštanje unutar 18 mjeseci. Kritične ranjivosti bit će popravljene na 5 godina do listopada 2024. Korektivna ažuriranja za granu 3.8 objavljivat će se svaka dva mjeseca, a prvo korektivno izdanje Pythona 3.8.1 zakazano je za prosinac.

Među dodanim inovacije:

  • podrška operacije dodjele unutar složenih izraza. S novim operatorom “:=” moguće je izvršiti operacije dodjele vrijednosti unutar drugih izraza, na primjer, kako bi se izbjegli dvostruki pozivi funkcija u uvjetnim izjavama i prilikom definiranja petlji:

    ako je (n := len(a)) > 10:
    ...

    dok (blok := f.read(256)) != ":
    ...

  • podrška nova sintaksa za određivanje argumenata funkcije. Prilikom nabrajanja argumenata tijekom definicije funkcije, sada možete navesti "/" za odvajanje argumenata kojima se mogu dodijeliti samo vrijednosti na temelju redoslijeda kojim su vrijednosti nabrojane tijekom poziva funkcije od argumenata koji se mogu dodijeliti bilo kojim redoslijedom (sintaksa varijabla=vrijednost) ). S praktične strane, nova značajka omogućuje funkcijama u Pythonu da potpuno oponašaju ponašanje postojećih funkcija u C-u, kao i da izbjegnu vezanje na određena imena, na primjer, ako se naziv parametra planira promijeniti u budućnosti.

    Oznaka “/” nadopunjuje prethodno dodanu oznaku “*”, odvajajući varijable za koje je primjenjiva samo dodjela u obliku “varijabla=vrijednost”. Na primjer, u funkciji "def f(a, b, /, c, d, *, e, f):" varijable "a" i "b" mogu se dodijeliti samo redoslijedom kojim su vrijednosti navedene ,
    varijable “e” i “f”, samo kroz dodjelu “varijabla=vrijednost”, a varijable “c” i “d” na bilo koji od sljedećih načina:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Dodano novi C API
    za konfiguriranje parametara inicijalizacije Pythona, omogućujući potpunu kontrolu nad svime konfiguracija i pružanje naprednih mogućnosti za rukovanje pogreškama. Predloženi API olakšava ugradnju funkcionalnosti tumača Pythona u druge C aplikacije;

  • Provedeno novi Vectorcall protokol za brži pristup objektima napisanim u C jeziku. U CPython 3.8, pristup Vectorcallu još uvijek je ograničen na internu upotrebu; prijenos u kategoriju javno dostupnih API-ja planiran je u CPython 3.9;
  • Dodano pozive na Runtime Audit Hooks, koji aplikacijama i okvirima u Pythonu pružaju pristup informacijama niske razine o napretku skripte za reviziju izvršenih radnji (na primjer, možete pratiti uvoz modula, otvaranje datoteka, korištenje praćenja, pristup mrežnim utičnicama, pokretanje koda kroz exec, eval i run_mod);
  • U modulu kiseli krastavac osiguran podrška za Pickle 5 protokol, koji se koristi za serijalizaciju i deserijalizaciju objekata. Pickle vam omogućuje optimiziranje prijenosa velikih količina podataka između Python procesa u konfiguracijama s više jezgri i više čvorova smanjenjem broja operacija kopiranja memorije i primjenom dodatnih tehnika optimizacije kao što je korištenje algoritama za kompresiju specifičnih za podatke. Peta inačica protokola je značajna po dodatku izvanpojasnog načina prijenosa, u kojem se podaci mogu prenositi odvojeno od glavnog toka pickle-a.
  • Standardno je aktivirana četvrta verzija Pickle protokola, koja u usporedbi s trećom verzijom prethodno ponuđenom standardno, omogućuje veće performanse i smanjenje veličine prenesenih podataka;
  • U modulu upisivanjem Uvodi se nekoliko novih značajki:
    • Klasa TypedDict za asocijativne nizove u kojima su informacije o tipu eksplicitno navedene za podatke povezane s ključevima (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Vrsta doslovan, koji vam omogućuje da ograničite parametar ili povratnu vrijednost na nekoliko unaprijed definiranih vrijednosti (“Literal['connected', 'disconnected']”).
    • izgradnja "Final", koji omogućuje definiranje vrijednosti varijabli, funkcija, metoda i klasa koje se ne mogu mijenjati ili ponovno dodijeliti ("pi: Final[float] = 3.1415926536").
  • Dodana je mogućnost dodjele predmemorije za kompajlirane datoteke s bajt kodom, spremljene u posebnom FS stablu i odvojene od direktorija s kodom. Put za spremanje datoteka s bajt kodom postavlja se preko varijable PYTHONPYCACHEPREFIX ili opciju "-X pycache_prefix";
  • Provedeno mogućnost stvaranja debug buildova Pythona koji koriste ABI identičan izdanju, što vam omogućuje učitavanje ekstenzija napisanih na SI jeziku, kompiliranih za stabilna izdanja, u debug buildovima;
  • f-nizovi (formatirani literali s prefiksom 'f') pružaju podršku za operator = (na primjer, "f'{expr=}'"), koji vam omogućuje pretvaranje izraza u tekst radi lakšeg otklanjanja pogrešaka. Na primjer:

    ››› korisnik = 'eric_idle'
    ››› member_since = datum(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Izraz "nastaviti» dopušteno koristiti unutar bloka konačno;
  • Dodan je novi modul višeprocesiranje.dijeljena_memorija, dopuštajući korištenje dijeljenih memorijskih segmenata u višeprocesnim konfiguracijama;
  • Na Windows platformi, asyncio implementacija je premještena na korištenje klase ProactorEventLoop;
  • Učinkovitost instrukcije LOAD_GLOBAL povećana je za približno 40% zbog upotrebe novog mehanizma predmemoriranja objektnog koda.

Izvor: opennet.ru

Dodajte komentar