Python 3.9

Python 3.9.0 (lopullinen) julkaistiin 5.10.2020. Version 3.9 ominaisuudet on määritelty dokumentissa PEP 596 ja yksityiskohtainen kuvaus muutoksista löytyy dokumentista What’s New in Python 3.9

Ominaisuudet

Tila

PEP 573

Nopea pääsy moduulin tilaan C-laajennustyyppien metodeista

Ei relevantti

PEP 584

Unioni-operaattorit lisätty sanakirjaan (dict)

Valmis [1]

PEP 585

Tyyppivihjeiden geneeriset tyypit vakiokokoelmissa

PEP 593

Joustavat funktio- ja muuttuja-annotaatiot

PEP 602

CPython ottaa käyttöön vuosittaisen julkaisusyklin. Vuosittaisen sijaan tavoitteena kahden kuukauden julkaisusykli

Ei relevantti

PEP 614

Väljennetyt kielioppirajoitukset dekoraattoreille

PEP 615

IANA-aikavyöhyketietokanta on nyt vakiokirjastossa zoneinfo-moduulissa

PEP 616

Merkkijonometodit etuliitteiden ja jälkiliitteiden poistamiseen

PEP 617

CPython käyttää nyt uutta PEG-pohjaista jäsennintä

Ei relevantti

Muut kielen muutokset:

__import__() nostaa nyt ImportError:n ValueError:n sijaan

Valmis

Python hakee nyt komentorivillä määritetyn skriptitiedoston absoluuttisen polun (esim. python3 script.py): __main__-moduulin __file__-attribuutista tuli absoluuttinen polku suhteellisen polun sijaan

Oletuksena, parhaan suorituskyvyn vuoksi, errors-argumentti tarkistetaan vain ensimmäisen koodaus-/dekoodausvirheen kohdalla, ja encoding-argumentti jätetään joskus huomiotta tyhjien merkkijonojen kohdalla

””.replace(””, s, n) palauttaa nyt s:n tyhjän merkkijonon sijaan kaikilla nollasta poikkeavilla n:n arvoilla. Se on nyt yhdenmukainen ilmauksen ””.replace(””, s) kanssa

Mitä tahansa kelvollista lauseketta voidaan nyt käyttää dekoraattorina. Aiemmin kielioppi oli paljon rajoittavampi

Funktioiden aclose() / asend() / athrow() rinnakkainen suorittaminen on nyt kielletty, ja ag_running heijastaa nyt asynkronisen generaattorin todellista suoritustilaa

Odottamattomia virheitä __iter__-metodin kutsumisessa ei enää peitetä TypeError-virheellä in-operaattorissa eikä operator-moduulin funktioissa contains(), indexOf() ja countOf()

Sulkemattomat lambda-lausekkeet eivät enää voi olla lausekeosana läpikäyntien (comprehension) ja generaattorilausekkeiden if-lohkossa

Sisäänrakennettujen moduulien muutokset:

asyncio

Merkittävien tietoturvahuolien vuoksi asyncio.loop.create_datagram_endpoint()-funktion reuse_address-parametria ei enää tueta

Lisätty uusi korutiini shutdown_default_executor(), joka ajastaa oletussuorittajan sammutuksen ja odottaa, että ThreadPoolExecutor lopettaa sulkemisen. Lisäksi asyncio.run() on päivitetty käyttämään uutta korutiinia.

Lisätty asyncio.PidfdChildWatcher, Linux-kohtainen lapsiprosessien valvojatoteutus, joka kyselee prosessien tiedostokuvaajia (file descriptor)

lisätty uusi coroutine asyncio.to_thread()

Kun tehtävä perutaan aikakatkaisun vuoksi, asyncio.wait_for() odottaa nyt peruutuksen valmistumiseen asti myös tapauksessa, jossa aikakatkaisu on <= 0, kuten se tekee positiivisilla aikakatkaisuilla

asyncio nostaa nyt TyperError:n, kun yhteensopimattomia metodeja kutsutaan ssl.SSLSocket-soketin kanssa

gc

Roskienkeräys ei jää odottamaan henkiinherätettyjä objekteja

Lisätty uusi funktio gc.is_finalized() tarkistamaan, onko objekti viimeistelty roskienkerääjän toimesta

math

Laajennettu math.gcd()-funktio käsittelemään useita argumentteja. Aiemmin se tuki vain kahta argumenttia

Lisätty math.lcm(): palauttaa määritettyjen argumenttien pienimmän yhteisen jaettavan

Lisätty math.nextafter(): palauttaa seuraavan liukulukuarvon x:n jälkeen kohti y:tä

Lisätty math.ulp(): palauttaa liukuluvun vähiten merkitsevän bitin arvon

os

Tuotu esiin Linux-kohtaiset os.pidfd_open() ja os.P_PIDFD

Funktio os.unsetenv() on nyt saatavilla myös Windowsissa

Valmis

Funktiot os.putenv() ja os.unsetenv() ovat nyt aina saatavilla

Valmis

Lisätty funktio os.waitstatus_to_exitcode(): muuntaa odotustilan poistumiskoodiksi

random

Lisätty uusi metodi random.Random.randbytes: generoi satunnaisia tavuja

sys

Lisätty uusi attribuutti sys.platlibdir: alustakohtaisen kirjastohakemiston nimi

Aiemmin sys.stderr oli lohkopuskuroitu ei-interaktiivisessa tilassa. Nyt stderr on oletuksena aina rivipuskuroitu

Huomautukset