Izdanje programskog jezika Python 3.8

Nakon godinu i po dana razvoja predstavljen glavno izdanje programskog jezika Python 3.8. Korektivna ažuriranja za granu Python 3.8 planirano puštanje u roku od 18 mjeseci. Kritične ranjivosti će biti ispravljene na 5 godina do oktobra 2024. Ispravna ažuriranja za granu 3.8 će biti objavljena svaka dva mjeseca, a prvo ispravno izdanje Python-a 3.8.1 zakazano je za decembar.

Među dodanim inovacije:

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

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

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

  • podrška nova sintaksa za specificiranje argumenata funkcije. Prilikom nabrajanja argumenata tokom definicije funkcije, sada možete navesti "/" da odvojite argumente kojima se mogu dodijeliti vrijednosti samo na osnovu redoslijeda u kojem se vrijednosti nabrajaju tokom poziva funkcije, od argumenata koji se mogu dodijeliti bilo kojim redoslijedom (sintaksa varijabla=vrijednost) ). S praktične strane, nova karakteristika omogućava funkcijama u Pythonu da u potpunosti oponašaju ponašanje postojećih funkcija u C-u, a također i izbjegavanje vezivanja za određena imena, na primjer, ako se planira mijenjanje imena parametra u budućnosti.

    Oznaka “/” nadopunjuje prethodno dodanu “*” zastavicu, odvajajući varijable za koje je primjenjiva samo dodjela u obliku “varijable=vrijednost”. Na primjer, u funkciji "def f(a, b, /, c, d, *, e, f):" varijable "a" i "b" mogu se dodijeliti samo redoslijedom kojim su navedene vrijednosti ,
    varijable “e” i “f”, samo kroz dodjelu “varijable=vrijednost”, i 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
    da konfigurišete Python parametre inicijalizacije, omogućavajući potpunu kontrolu nad svim konfiguraciju i pružanje naprednih mogućnosti za rukovanje greškama. Predloženi API olakšava ugrađivanje funkcionalnosti Python interpretera u druge C aplikacije;

  • Implementirano novi Vectorcall protokol za brži pristup objektima napisanim u C jeziku. U CPython-u 3.8 pristup Vectorcall-u je i dalje ograničen na internu upotrebu, a prelazak u kategoriju javno dostupnih API-ja planiran je u CPython-u 3.9;
  • Dodano poziva Runtime Audit Hooks, koji aplikacijama i okvirima u Pythonu pružaju pristup informacijama niskog nivoa o napretku skripte za reviziju izvršenih radnji (na primjer, možete pratiti uvoz modula, otvaranje datoteka, korištenjem 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 deserializaciju objekata. Pickle vam omogućava da optimizirate prijenos velikih količina podataka između Python procesa u konfiguracijama s više jezgara i više čvorova smanjenjem broja operacija kopiranja memorije i primjenom dodatnih tehnika optimizacije kao što je korištenje algoritama kompresije specifičnih za podatke. Peta verzija protokola je značajna po dodavanju načina prijenosa izvan opsega, u kojem se podaci mogu prenositi odvojeno od glavnog toka kiselog toka.
  • Podrazumevano je aktivirana četvrta verzija Pickle protokola, koja, u poređenju sa trećom verzijom koja je ranije bila podrazumevano ponuđena, omogućava veće performanse i smanjenje veličine prenetih podataka;
  • U modulu tipkanje Uvedeno je nekoliko novih funkcija:
    • Класс TypedDict za asocijativne nizove u kojima su informacije o tipu eksplicitno specificirane za podatke povezane sa ključevima (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Tip Bukvalno, koji vam omogućava da ograničite parametar ili povratnu vrijednost na nekoliko unaprijed definiranih vrijednosti („Literal['connected', 'disconnected']").
    • Izgradnja "Final", što omogućava definiranje vrijednosti varijabli, funkcija, metoda i klasa koje se ne mogu mijenjati ili ponovno dodijeliti ("pi: Final[float] = 3.1415926536").
  • Dodata je mogućnost dodjeljivanja keš memorije za kompajlirane datoteke sa bajt kodom, sačuvane u posebnom FS stablu i odvojene od direktorija sa kodom. Putanja za čuvanje datoteka sa bajt kodom se postavlja preko varijable PYTHONPYCACHEPREFIX ili opciju "-X pycache_prefix";
  • Implementirano mogućnost kreiranja debug build-ova Python-a koji koriste ABI identičan izdanju, što vam omogućava da učitate ekstenzije napisane na SI jeziku, kompajlirane za stabilna izdanja, u debug buildovima;
  • f-stringovi (formatirani literali sa prefiksom 'f') pružaju podršku za operator = (na primjer, "f'{expr=}'"), koji vam omogućava da pretvorite izraz u tekst radi lakšeg otklanjanja grešaka. Na primjer:

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

  • Izraz "nastaviti» dozvoljeno za korištenje unutar bloka napokon;
  • Dodat je novi modul multiprocessing.shared_memory, omogućavajući korištenje dijeljenih memorijskih segmenata u višeprocesnim konfiguracijama;
  • Na Windows platformi, asyncio implementacija je premještena da koristi klasu ProactorEventLoop;
  • Performanse instrukcije LOAD_GLOBAL povećane su za približno 40% zbog upotrebe novog mehanizma za keširanje objektnog koda.

izvor: opennet.ru

Dodajte komentar