Python 3.9: Što je novo i bolje

Python 3.9, objavljen danas, donosi značajne promjene kako u značajkama jezika tako i u načinu na koji je jezik razvijen. Python je popularnost povećao posljednjih nekoliko godina, a njegova je upotreba eksplodirala u područjima koja se brzo razvijaju, poput znanosti o podacima i strojnog učenja. Projekt naporno radi kako bi išao u korak sa svim novim zahtjevima. 

Evo pregleda svih velikih novih značajki u Pythonu 3.9.

Python prelazi na godišnji ciklus izdanja

Do ovog trenutka Python je razvijen i objavljen u osamnaestomjesečnom ritmu. PEP 602 predložio je da razvojni tim Pythona usvoji godišnji ciklus objavljivanja i taj je prijedlog prihvaćen. 

Godišnji ciklus izdanja znači manje značajki po izdanju, ali znači i brže povratne informacije o testiranju značajki, manje potencijalno rušenja promjena za svako izdanje, a time i veći poticaj za korisnike i upravitelje distribucije Linuxa da češće nadograđuju Python. To također znači da novim značajkama koje su predložene kasno u razvojnom ciklusu neće trebati toliko vremena da se uvedu u novo izdanje.

Nova vremenska crta znači da će Python 3.9 biti isporučen u listopadu 2020. Python 3.10 službeno je započeo pre-alfa razvoj 19. svibnja 2020, ući će u fazu alfa razvoja kada Python 3.9 bude isporučen, a isporučit će se u listopadu 2021. Buduća izdanja Pythona slijedit će isti obrazac.

Python prema zadanim postavkama postaje brži

Svaka revizija Pythona uživa u poboljšanju performansi u odnosu na prethodnu verziju. Python 3.9 uključuje dva velika poboljšanja koja poboljšavaju performanse bez potrebe za promjenama postojećeg koda.

Prvo poboljšanje uključuje veću upotrebu vectorcallprotokola uvedenog u Python 3.8. vectorcallčini mnoge uobičajene pozive funkcija bržim smanjivanjem ili uklanjanjem privremenih objekata stvorenih za poziv. U Pythonu 3.9, nekoliko ugrađenih Pythona - range, tuple, set, frozenset, list, dict- koristi se vectorcallinterno za ubrzavanje izvršavanja.

Drugo veliko poboljšanje performansi je učinkovitije raščlanjivanje izvornog koda Pythona. Novi parser za CPython vrijeme izvođenja nije dizajniran za rješavanje problema s performansama, već za rješavanje internih nedosljednosti u izvornom parseru. Međutim, važna prednost je brže raščlanjivanje, posebno za velike količine koda.

Više funkcija Python stringa i rječnika

Python olakšava manipulaciju uobičajenim vrstama podataka, a Python 3.9 proširuje ovu lakoću novim značajkama za nizove i rječnike. Za nizove postoje nove metode za uklanjanje prefiksa i sufiksa, operacije koje već dugo zahtijevaju puno ručnog rada. Za rječnike sada postoje sindikalni operatori, jedan za spajanje dva rječnika u novi rječnik i jedan za ažuriranje sadržaja jednog rječnika s drugim rječnikom.

Dekoratori gube neka ograničenja

Dekoratori vam omogućuju umotavanje Python funkcija kako biste programski promijenili njihovo ponašanje. Prije su se dekoratori mogli sastojati samo od simbola @, imena (npr. func) Ili točkastog imena ( func.method), a po želji i jednog poziva ( func.method(arg1, arg2)). Uz Python 3.9, dekorateri se sada mogu sastojati od bilo kojeg valjanog izraza.

Jedan dugogodišnji način zaobilaženja ovog ograničenja bio je stvaranje funkcije ili lambda izraza koji bi zauzeli za složeniji izraz kada se koriste kao dekorator. Sada će bilo koji izraz učiniti, pod uvjetom da daje nešto što može funkcionirati kao dekorator.

Nove operacije tipa Python

Tijekom posljednjih nekoliko verzija, Python je proširio podršku za nagovještavanje tipova. To je uglavnom radi lintera i provjeravanja koda; tipovi se ne provode tijekom izvođenja u CPythonu i ne planira se Python pretvoriti u statički upisan jezik. Ali nagovještavanje tipa moćan je alat za osiguravanje dosljednosti u velikim bazama kodova, tako da Python kôd i dalje može imati koristi od upućivanja na tip. 

Dvije nove značajke za nagovještavanje tipova i bilješke o tipovima ušle su u Python 3.9. U jednom su natuknice za sadržaj zbirki - npr. Popisi i rječnici - sada izvorno dostupne u Pythonu. To znači da na primjer možete popis opisati kao list[int] - popis cijelih brojeva - bez potrebe da typingknjižnica to radi.

Drugi dodatak Pythonovim mehanizmima za tipkanje je fleksibilna bilješka funkcija i varijabli. To omogućuje upotrebu Annotatedtipa za opis tipa pomoću metapodataka koji se mogu ispitati prije vremena (alatima za povezivanje) ili tijekom izvođenja. Na primjer, Annotated[int, ctype("char")]mogao bi se koristiti za opis cijelog broja koji bi se trebao smatrati chartipom u C. Prema zadanim postavkama Python ne bi učinio ništa s takvom bilješkom, ali bi je mogli koristiti linteri koda. 

Poboljšanja internih Pythona

Čišćenje, pročišćavanje i modernizacija internih Pythona stalna je inicijativa za Pythonove programere, a Python 3.9 ima nekoliko promjena u tom smislu.

Prva je redizajn načina na koji moduli komuniciraju s mašinama za uvoz. Python moduli za proširenje, napisani na jeziku C, sada mogu koristiti novi mehanizam učitavanja zbog kojeg se ponašaju više poput uobičajenih Python modula prilikom uvoza. Nekoliko moduli u Pythona standardnoj biblioteci nedavno podržao takvo ponašanje: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. Novi mehanizam učitavanja ne samo da omogućuje Pythonu fleksibilnije rukovanje modulima proširenja, već omogućuje i nove mogućnosti poput naprednog ponašanja u vezivanju.

Druga inicijativa čišćenja je stabilni interni ABI za CPython, za koji se garantira da će trajati za života Pythona 3. Povijesno gledano, svaka veća revizija Pythona bila je ABI nespojiva s prethodnim verzijama, što je zahtijevalo ponovno sastavljanje modula proširenja za svaku novu verziju. Od sada će svi moduli za proširenje koji koriste stabilni ABI raditi u svim inačicama Pythona. S Python 3.9, slijedeće module u standardne biblioteke koristiti stabilno ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.

Ostale promjene u Pythonu 3.9

  • Pythonova standardna knjižnica sada podržava IANA bazu podataka vremenske zone. Spomenuta baza podataka dobro je održavana i široko se koristi, a imati će izravan način korištenja u Pythonovoj knjižnici datuma i vremena, što će vam uštedjeti vrijeme.
  • Nove metode nizova omogućuju jednostavno uklanjanje prefiksa i sufiksa. Ovo je jedan od uobičajenih scenarija svakodnevne uporabe koji je zahtijevao malo previše uzorka nego što se činilo potrebnim. Nove .removeprefix()i .removesuffix()metode vraćaju modificiranu kopiju niza umanjenu za dotični prefiks ili sufiks, pod uvjetom da postoje u nizu.

Kako učiniti više s Pythonom

  • 4 programa za provjeru Python za održavanje čistoće vašeg koda
  • Python stil: 5 alata za čišćenje vašeg Python koda
  • Kako raditi s tipom podataka popisa Python
  • Kako spakirati Python aplikacije s BeeWare aktovkom
  • Kako pokrenuti Anacondu rame uz rame s drugim Pythonima
  • Kako koristiti Python klase podataka
  • Započnite s async u Pythonu
  • Kako koristiti asyncio u Pythonu
  • 3 koraka do Python async remonta
  • Kako koristiti PyInstaller za stvaranje Python izvršnih datoteka
  • Vodič za Cython: Kako ubrzati Python
  • Kako instalirati Python na pametan način
  • Kako upravljati Python projektima pomoću Poezije
  • Kako upravljati Python projektima s Pipenv-om
  • Virtualenv i venv: Objašnjena Python virtualna okruženja
  • Python virtualenv i venv čine i ne čine
  • Objašnjeni Python navoji i potprocesi
  • Kako se koristi Python program za ispravljanje pogrešaka
  • Kako koristiti timeit za profiliranje Python koda
  • Kako koristiti cProfile za profiliranje Python koda
  • Kako pretvoriti Python u JavaScript (i natrag)