Python 3.8

Python 3.8.0 (završna verzija) izdan je 14. listopada 2019. Značajke za 3.8 definirane su u PEP 569, a detaljan opis promjena može se pronaći u What’s New in Python 3.8.

Značajke

Status

PEP 570

Isključivo pozicijski argumenti

PEP 572

Izrazi pridruživanja

Dovršeno

PEP 574

Pickle protokol 5 s podacima izvan opsega (out-of-band)

PEP 578

Kuke za reviziju tijekom izvođenja (runtime audit hooks)

PEP 587

Konfiguracija inicijalizacije Pythona

PEP 590

Vectorcall: brzi protokol pozivanja za CPython

Razno

f-stringovi podržavaju = za izraze koji se sami dokumentiraju i za otklanjanje pogrešaka

Dovršeno

Ostale jezične promjene:

Naredba continue bila je nedopuštena u klauzuli finally zbog problema s implementacijom. U Pythonu 3.8 to je ograničenje ukinuto

Dovršeno

Tipovi bool, int i fractions.Fraction sada imaju metodu as_integer_ratio() poput one koja se nalazi u float i decimal.Decimal

Konstruktori tipova int, float i complex sada će koristiti posebnu metodu __index__(), ako je dostupna i ako odgovarajuća metoda __int__(), __float__() ili __complex__() nije dostupna

Dodana je podrška za izlazne sekvence N{name} u regularnim izrazima

Dict i pogledi rječnika sada su iterabilni obrnutim redoslijedom umetanja pomoću reversed()

Sintaksa dopuštena za imena ključnih riječi u pozivima funkcija dodatno je ograničena. Konkretno, f((keyword)=arg) više nije dopušteno

Generalizirano raspakiravanje iterabilnih objekata u naredbama yield i return više ne zahtijeva okružujuće zagrade

Kada zarez nedostaje u kodu kao što je [(10, 20) (30, 40)], prevoditelj prikazuje SyntaxWarning s korisnim prijedlogom

Aritmetičke operacije između podklasa datetime.date ili datetime.datetime i objekata datetime.timedelta sada vraćaju instancu podklase, umjesto bazne klase

Kada se Python interpreter prekine pomoću Ctrl-C (SIGINT) i nastala iznimka KeyboardInterrupt ne uhvati se, Python proces sada izlazi putem signala SIGINT ili s ispravnim izlaznim kodom tako da pozivajući proces može otkriti da je proces završio zbog Ctrl-C

Neki napredni stilovi programiranja zahtijevaju ažuriranje objekta types.CodeType za postojeću funkciju

Za cijele brojeve, troargumentni oblik funkcije pow() sada dopušta da eksponent bude negativan u slučaju kada je baza relativno prosta s modulom

Komprehenzije rječnika usklađene su s literalima rječnika tako da se najprije izračunava ključ, a zatim vrijednost

Metoda object.__reduce__() sada može vratiti n-torku duljine od dva do šest elemenata

Promjene ugrađenih modula:

asyncio

asyncio.run() prešla je iz privremenog u stabilni API

Dovršeno

Pokretanje python -m asyncio pokreće izvorno asinkroni REPL

Iznimka asyncio.CancelledError sada nasljeđuje od BaseException umjesto od Exception i više ne nasljeđuje od concurrent.futures.CancelledError

Dovršeno

Dodana je asyncio.Task.get_coro() za dohvat omotane korutine unutar asyncio.Task

Asyncio zadaci sada se mogu imenovati, bilo prosljeđivanjem ključnog argumenta name funkciji asyncio.create_task() ili metodi create_task() petlje događaja, bilo pozivanjem metode set_name() na objektu zadatka

Dodana je podrška za Happy Eyeballs u asyncio.loop.create_connection(). Za određivanje ponašanja dodana su dva nova parametra: happy_eyeballs_delay i interleave.

gc

get_objects() sada može primiti opcionalni parametar generation koji označava generaciju iz koje se dohvaćaju objekti. (Napominjemo, međutim, da iako je gc ugrađen, get_objects() nije implementirana za MicroPython)

math

Dodana je nova funkcija math.dist() za izračun euklidske udaljenosti između dviju točaka

Proširena je funkcija math.hypot() za obradu više dimenzija

Dodana je nova funkcija math.prod(), kao analogna funkciji sum(), koja vraća umnožak „početne” vrijednosti (zadano: 1) puta iterabilni niz brojeva

Dodane su dvije nove kombinatorne funkcije math.perm() i math.comb()

Dodana je nova funkcija math.isqrt() za izračun točnih cjelobrojnih kvadratnih korijena bez pretvorbe u brojeve s pomičnim zarezom

Funkcija math.factorial() više ne prihvaća argumente koji nisu nalik cijelom broju

Dovršeno

sys

Dodana je nova funkcija sys.unraisablehook() koja se može nadjačati radi upravljanja načinom obrade „neizazivljivih iznimaka”