Python 3.8

Python 3.8.0 (finální) byl vydán 14. října 2019. Funkce pro 3.8 jsou definovány v PEP 569 a podrobný popis změn lze nalézt v Co je nového v Pythonu 3.8.

Funkce

Stav

PEP 570

Pouze poziční argumenty

PEP 572

Přiřazovací výrazy

Hotovo

PEP 574

Pickle protokol 5 s daty mimo pásmo (out-of-band)

PEP 578

Auditovací hooky za běhu

PEP 587

Konfigurace inicializace Pythonu

PEP 590

Vectorcall: rychlý protokol volání pro CPython

Různé

f-řetězce podporují = pro samodokumentující výrazy a ladění

Hotovo

Další změny v jazyce:

Příkaz continue byl v klauzuli finally nepřípustný kvůli problému s implementací. V Pythonu 3.8 bylo toto omezení odstraněno

Hotovo

Typy bool, int a fractions.Fraction nyní mají metodu as_integer_ratio() podobnou té, která se nachází v float a decimal.Decimal

Konstruktory int, float a complex nyní použijí speciální metodu __index__(), pokud je dostupná a odpovídající metoda __int__(), __float__() nebo __complex__() dostupná není

Byla přidána podpora escape sekvencí N{name} v regulárních výrazech

Dict a dictviews jsou nyní iterovatelné v obráceném pořadí vkládání pomocí reversed()

Syntaxe povolená pro názvy klíčových argumentů ve voláních funkcí byla dále omezena. Konkrétně f((keyword)=arg) již není povoleno

Zobecněné rozbalování iterovatelných objektů v příkazech yield a return již nevyžaduje uzavírající závorky

Když je v kódu jako [(10, 20) (30, 40)] vynechána čárka, kompilátor zobrazí SyntaxWarning s užitečným návrhem

Aritmetické operace mezi podtřídami datetime.date nebo datetime.datetime a objekty datetime.timedelta nyní vracejí instanci podtřídy namísto bázové třídy

Když je interpret Pythonu přerušen pomocí Ctrl-C (SIGINT) a výsledná výjimka KeyboardInterrupt není zachycena, proces Pythonu nyní končí prostřednictvím signálu SIGINT nebo se správným návratovým kódem tak, aby volající proces mohl zjistit, že proces zemřel kvůli Ctrl-C

Některé pokročilé styly programování vyžadují aktualizaci objektu types.CodeType pro existující funkci

Pro celá čísla nyní tříargumentová forma funkce pow() umožňuje, aby byl exponent záporný v případě, kdy je základ nesoudělný s modulem

Komprehenze slovníků byly sjednoceny se slovníkovými literály tak, že se nejprve vypočte klíč a poté hodnota

Metoda object.__reduce__() nyní může vracet n-tici o délce dva až šest prvků

Změny ve vestavěných modulech:

asyncio

asyncio.run() se posunula z předběžného na stabilní API

Hotovo

Spuštění python -m asyncio spustí nativně asynchronní REPL

Výjimka asyncio.CancelledError nyní dědí z BaseException namísto Exception a již nedědí z concurrent.futures.CancelledError

Hotovo

Byla přidána asyncio.Task.get_coro() pro získání zabalené korutiny v rámci asyncio.Task

Úlohy asyncio lze nyní pojmenovat, a to buď předáním klíčového argumentu name funkci asyncio.create_task() nebo metodě smyčky událostí create_task(), nebo voláním metody set_name() na objektu úlohy

Byla přidána podpora Happy Eyeballs do asyncio.loop.create_connection(). K určení chování byly přidány dva nové parametry: happy_eyeballs_delay a interleave.

gc

get_objects() nyní může přijímat volitelný parametr generation udávající generaci, ze které se mají objekty získat. (Pamatujte však, že ačkoli gc je vestavěný modul, get_objects() není pro MicroPython implementována)

math

Byla přidána nová funkce math.dist() pro výpočet euklidovské vzdálenosti mezi dvěma body

Funkce math.hypot() byla rozšířena tak, aby zvládala více dimenzí

Byla přidána nová funkce math.prod() jako obdoba funkce sum(), která vrací součin počáteční hodnoty „start“ (výchozí: 1) a iterovatelné posloupnosti čísel

Byly přidány dvě nové kombinatorické funkce math.perm() a math.comb()

Byla přidána nová funkce math.isqrt() pro výpočet přesných celočíselných druhých odmocnin bez převodu na plovoucí desetinnou čárku

Funkce math.factorial() již nepřijímá argumenty, které nejsou celočíselného typu

Hotovo

sys

Byla přidána nová funkce sys.unraisablehook(), kterou lze přepsat pro řízení toho, jak se zpracovávají „unraisable exceptions“