Python 3.8

Python 3.8.0 (final) został wydany 14 października 2019 r. Funkcje dla wersji 3.8 są zdefiniowane w PEP 569, a szczegółowy opis zmian można znaleźć w What’s New in Python 3.8.

Funkcje

Status

PEP 570

Argumenty wyłącznie pozycyjne

PEP 572

Wyrażenia przypisania

Ukończone

PEP 574

Protokół pickle 5 z danymi poza pasmem

PEP 578

Haki audytu w czasie wykonania

PEP 587

Konfiguracja inicjalizacji Pythona

PEP 590

Vectorcall: szybki protokół wywołań dla CPython

Różne

f-stringi obsługują = dla samodokumentujących się wyrażeń i debugowania

Ukończone

Inne zmiany w języku:

Instrukcja continue była niedozwolona w klauzuli finally z powodu problemu z implementacją. W Pythonie 3.8 to ograniczenie zostało zniesione

Ukończone

Typy bool, int i fractions.Fraction mają teraz metodę as_integer_ratio(), taką jak ta występująca w float i decimal.Decimal

Konstruktory int, float i complex będą teraz używać metody specjalnej __index__(), jeśli jest dostępna, a odpowiadająca jej metoda __int__(), __float__() lub __complex__() nie jest dostępna

Dodano obsługę sekwencji ucieczki N{name} w wyrażeniach regularnych

Dict i dictviews są teraz iterowalne w odwróconej kolejności wstawiania za pomocą reversed()

Składnia dozwolona dla nazw słów kluczowych w wywołaniach funkcji została dodatkowo ograniczona. W szczególności f((keyword)=arg) nie jest już dozwolone

Uogólnione rozpakowywanie iterowalne w instrukcjach yield i return nie wymaga już otaczających nawiasów

Gdy w kodzie takim jak [(10, 20) (30, 40)] brakuje przecinka, kompilator wyświetla SyntaxWarning z pomocną sugestią

Operacje arytmetyczne między podklasami datetime.date lub datetime.datetime a obiektami datetime.timedelta zwracają teraz instancję podklasy, a nie klasy bazowej

Gdy interpreter Pythona zostanie przerwany przez Ctrl-C (SIGINT), a wynikający z tego wyjątek KeyboardInterrupt nie zostanie przechwycony, proces Pythona kończy teraz działanie za pomocą sygnału SIGINT lub z poprawnym kodem wyjścia, tak aby proces wywołujący mógł wykryć, że zakończył działanie z powodu Ctrl-C

Niektóre zaawansowane style programowania wymagają aktualizacji obiektu types.CodeType dla istniejącej funkcji

W przypadku liczb całkowitych trójargumentowa forma funkcji pow() pozwala teraz, aby wykładnik był ujemny w przypadku, gdy podstawa jest względnie pierwsza z modułem

Wyrażenia listowe słownikowe zostały zsynchronizowane z literałami słowników, tak aby klucz był obliczany jako pierwszy, a wartość jako druga

Metoda object.__reduce__() może teraz zwracać krotkę o długości od dwóch do sześciu elementów

Zmiany w modułach wbudowanych:

asyncio

asyncio.run() przeszło z wstępnego do stabilnego API

Ukończone

Uruchomienie python -m asyncio uruchamia natywnie asynchroniczny REPL

Wyjątek asyncio.CancelledError dziedziczy teraz po BaseException zamiast po Exception i nie dziedziczy już po concurrent.futures.CancelledError

Ukończone

Dodano asyncio.Task.get_coro() do pobierania opakowanej korutyny w obrębie asyncio.Task

Zadania asyncio mogą teraz być nazywane, albo przez przekazanie argumentu słowa kluczowego name do asyncio.create_task() lub do metody pętli zdarzeń create_task(), albo przez wywołanie metody set_name() na obiekcie zadania

Dodano obsługę Happy Eyeballs do asyncio.loop.create_connection(). Aby określić zachowanie, dodano dwa nowe parametry: happy_eyeballs_delay i interleave.

gc

get_objects() może teraz otrzymać opcjonalny parametr generacji wskazujący generację, z której mają być pobrane obiekty. (Należy jednak zauważyć, że chociaż gc jest wbudowany, get_objects() nie jest zaimplementowany dla MicroPython)

math

Dodano nową funkcję math.dist() do obliczania odległości euklidesowej między dwoma punktami

Rozszerzono funkcję math.hypot() o obsługę wielu wymiarów

Dodano nową funkcję math.prod(), jako odpowiednik funkcji sum(), która zwraca iloczyn wartości początkowej „start” (domyślnie: 1) i iterowalnego zbioru liczb

Dodano dwie nowe funkcje kombinatoryczne math.perm() i math.comb()

Dodano nową funkcję math.isqrt() do obliczania dokładnych całkowitych pierwiastków kwadratowych bez konwersji na liczby zmiennoprzecinkowe

Funkcja math.factorial() nie akceptuje już argumentów, które nie są przypominające int

Ukończone

sys

Dodano nową funkcję sys.unraisablehook(), którą można nadpisać, aby kontrolować sposób obsługi „niezgłaszalnych wyjątków”