Python 3.8

Python 3.8.0 (lopullinen) julkaistiin 14.10.2019. Version 3.8 ominaisuudet on määritelty dokumentissa PEP 569 ja yksityiskohtainen kuvaus muutoksista löytyy dokumentista What’s New in Python 3.8.

Ominaisuudet

Tila

PEP 570

Vain sijaintiin perustuvat argumentit

PEP 572

Sijoituslausekkeet

Valmis

PEP 574

Pickle-protokolla 5 kaistan ulkopuolisella datalla

PEP 578

Ajonaikaiset auditointikoukut

PEP 587

Pythonin alustuskokoonpano

PEP 590

Vectorcall: nopea kutsuprotokolla CPythonille

Sekalaista

f-merkkijonot tukevat =-merkkiä itsedokumentoiviin lausekkeisiin ja virheenkorjaukseen

Valmis

Muut kielen muutokset:

continue-lause oli laiton finally-lohkossa toteutusongelman vuoksi. Pythonissa 3.8 tämä rajoitus poistettiin

Valmis

Tyypeillä bool, int ja fractions.Fraction on nyt as_integer_ratio()-metodi, kuten tyypeillä float ja decimal.Decimal

Tyyppien int, float ja complex konstruktorit käyttävät nyt erikoismetodia __index__(), jos se on saatavilla eikä vastaava metodi __int__(), __float__() tai __complex__() ole saatavilla

Lisätty tuki N{name}-escape-merkinnöille säännöllisissä lausekkeissa

Sanakirjat ja dictview-näkymät ovat nyt iteroitavissa käänteisessä lisäysjärjestyksessä reversed()-funktiolla

Funktiokutsujen avainsananimissä sallittua syntaksia rajoitettiin edelleen. Erityisesti f((keyword)=arg) ei ole enää sallittu

Yleistetty iteroitavien purkaminen yield- ja return-lauseissa ei enää vaadi ympäröiviä sulkeita

Kun pilkku puuttuu koodista, kuten [(10, 20) (30, 40)], kääntäjä näyttää SyntaxWarning-varoituksen hyödyllisellä ehdotuksella

Tyypin datetime.date tai datetime.datetime aliluokkien ja datetime.timedelta-objektien väliset aritmeettiset operaatiot palauttavat nyt aliluokan instanssin perusluokan sijaan

Kun Python-tulkki keskeytetään Ctrl-C (SIGINT)-näppäimillä eikä seurannutta KeyboardInterrupt-poikkeusta käsitellä, Python-prosessi poistuu nyt SIGINT-signaalin kautta tai oikealla poistumiskoodilla siten, että kutsuva prosessi voi havaita sen kuolleen Ctrl-C:n vuoksi

Jotkin edistyneet ohjelmointityylit vaativat olemassa olevan funktion types.CodeType-objektin päivittämistä

Kokonaisluvuilla pow()-funktion kolmiargumenttinen muoto sallii nyt eksponentin olla negatiivinen tapauksessa, jossa kantaluku on suhteellisen jaoton modulukseen nähden

Dict-läpikäynnit (comprehension) on synkronoitu dict-literaalien kanssa siten, että avain lasketaan ensin ja arvo toiseksi

object.__reduce__()-metodi voi nyt palauttaa monikon (tuple), jonka pituus on kahdesta kuuteen elementtiä

Sisäänrakennettujen moduulien muutokset:

asyncio

asyncio.run() on edennyt väliaikaisesta vakaaksi API:ksi

Valmis

python -m asyncio käynnistää natiivisti asynkronisen REPL:n

Poikkeus asyncio.CancelledError periytyy nyt tyypistä BaseException aiemman Exception:n sijaan eikä enää periydy tyypistä concurrent.futures.CancelledError

Valmis

Lisätty asyncio.Task.get_coro() käärityn korutiinin hakemiseen asyncio.Task-objektin sisältä

Asyncio-tehtävät voidaan nyt nimetä joko välittämällä name-avainsana-argumentti asyncio.create_task()-funktiolle tai tapahtumasilmukan create_task()-metodille, tai kutsumalla tehtäväobjektin set_name()-metodia

Lisätty tuki Happy Eyeballs -tekniikalle funktioon asyncio.loop.create_connection(). Toiminnan määrittämiseksi on lisätty kaksi uutta parametria: happy_eyeballs_delay ja interleave.

gc

get_objects() voi nyt vastaanottaa valinnaisen generation-parametrin, joka osoittaa sukupolven, josta objektit haetaan. (Huomaa kuitenkin, että vaikka gc on sisäänrakennettu, get_objects() ei ole toteutettu MicroPythonissa)

math

Lisätty uusi funktio math.dist() kahden pisteen välisen euklidisen etäisyyden laskemiseen

Laajennettu math.hypot()-funktio käsittelemään useita ulottuvuuksia

Lisätty uusi funktio math.prod(), joka on sum()-funktion vastine ja palauttaa ”start”-arvon (oletus: 1) ja iteroitavan lukusarjan tulon

Lisätty kaksi uutta kombinatorista funktiota math.perm() ja math.comb()

Lisätty uusi funktio math.isqrt() tarkkojen kokonaislukuneliöjuurien laskemiseen ilman liukulukumuunnosta

Funktio math.factorial() ei enää hyväksy argumentteja, jotka eivät ole int-tyyppisiä

Valmis

sys

Lisätty uusi funktio sys.unraisablehook(), joka voidaan ylikirjoittaa hallitsemaan, miten ”unraisable exceptions” -poikkeuksia käsitellään