Po półtora roku rozwoju przedstawione główne wydanie języka programowania Python 3.8. Aktualizacje korygujące dla gałęzi Python 3.8 planowane wypuścić w ciągu 18 miesięcy. Krytyczne luki zostaną usunięte na 5 lat, do października 2024 r. Aktualizacje korygujące dla gałęzi 3.8 będą wydawane co dwa miesiące, przy czym pierwsze wydanie korygujące Pythona 3.8.1 zaplanowano na grudzień.
Wsparcie operacje przypisania w obrębie wyrażeń złożonych. Dzięki nowemu operatorowi „:=” możliwe jest wykonywanie operacji przypisania wartości wewnątrz innych wyrażeń, na przykład w celu uniknięcia podwójnych wywołań funkcji w instrukcjach warunkowych i podczas definiowania pętli:
if (n := len(a)) > 10:
...
while (blok := f.read(256)) != ":
...
Wsparcie nowa składnia określania argumentów funkcji. Podczas wyliczania argumentów podczas definicji funkcji można teraz określić znak „/”, aby oddzielić argumenty, którym można przypisać wartości wyłącznie na podstawie kolejności wyliczania wartości podczas wywołania funkcji, od argumentów, które można przypisać w dowolnej kolejności (składnia zmienna=wartość)). Z praktycznego punktu widzenia, nowa funkcja pozwala funkcjom w Pythonie całkowicie emulować zachowanie istniejących funkcji w C, a także uniknąć wiązania z określonymi nazwami, na przykład jeśli planowana jest zmiana nazwy parametru w przyszłości.
Flaga „/” stanowi uzupełnienie dodanej wcześniej flagi „*”, oddzielając zmienne, dla których obowiązuje wyłącznie przypisanie w postaci „zmienna=wartość”. Przykładowo w funkcji „def f(a, b, /, c, d, *, e, f):” zmienne „a” i „b” można przypisać tylko w kolejności, w jakiej podane są wartości ,
zmienne „e” i „f” jedynie poprzez przypisanie „zmienna=wartość”, a zmienne „c” i „d” w dowolny z poniższych sposobów:
обавлен nowe API C
do skonfigurowania parametrów inicjalizacji Pythona, umożliwiając pełną kontrolę nad wszystkim konfiguracja oraz zapewnianie zaawansowanych funkcji obsługi błędów. Proponowany interfejs API ułatwia osadzanie funkcjonalności interpretera Pythona w innych aplikacjach C;
Wdrożone nowy protokół Vectorcall umożliwiający szybszy dostęp do obiektów napisanych w języku C. w CPython 3.8 dostęp do Vectorcall nadal ograniczony jest do użytku wewnętrznego, w CPython 3.9 planowane jest przeniesienie do kategorii publicznie dostępnych API;
Dodany wywołania Runtime Audit Hooks, które zapewniają aplikacjom i frameworkom w Pythonie dostęp do informacji niskiego poziomu o postępie skryptu w celu audytu wykonywanych akcji (można na przykład śledzić import modułów, otwieranie plików, za pomocą śledzenia, dostęp do gniazd sieciowych, uruchamianie kodu poprzez exec, eval i run_mod);
W module marynatazabezpieczone obsługa protokołu Pickle 5, używanego do serializacji i deserializacji obiektów. Pickle pozwala zoptymalizować transfer dużych ilości danych pomiędzy procesami Pythona w konfiguracjach wielordzeniowych i wielowęzłowych poprzez zmniejszenie liczby operacji kopiowania pamięci i zastosowanie dodatkowych technik optymalizacji, takich jak wykorzystanie algorytmów kompresji specyficznych dla danych. Piąta wersja protokołu wyróżnia się dodaniem trybu transmisji pozapasmowej, w którym dane mogą być przesyłane oddzielnie od głównego strumienia piklującego.
Domyślnie aktywowana jest czwarta wersja protokołu Pickle, która w porównaniu do oferowanej domyślnie domyślnie trzeciej wersji pozwala na wyższą wydajność i zmniejszenie rozmiaru przesyłanych danych;
W module wpisując Wprowadzono kilka nowych funkcji:
Klasa Wpisano Dykt dla tablic asocjacyjnych, w których informacja o typie jest jawnie określona dla danych powiązanych z kluczami („TypedDict('Point2D', x=int, y=int, label=str)”).
Typ Dosłowne, co pozwala ograniczyć parametr lub wartość zwracaną do kilku predefiniowanych wartości („Literal['połączony', 'rozłączony']").
Projekt "koniec", co umożliwia zdefiniowanie wartości zmiennych, funkcji, metod i klas, których nie można zmienić ani ponownie przypisać („pi: Final[float] = 3.1415926536”).
Dodano możliwość przypisania pamięci podręcznej dla skompilowanych plików z kodem bajtowym, zapisanej w osobnym drzewie FS i oddzielonej od katalogów z kodem. Ścieżkę do zapisywania plików z kodem bajtowym ustawia się za pomocą zmiennej PREFIKS PYTHONPYCACHE lub opcja „-X pycache_prefix”;
Wdrożone możliwość tworzenia kompilacji debugujących Pythona korzystających z ABI identycznego z wersją, co pozwala na ładowanie w kompilacjach debugujących rozszerzeń napisanych w języku SI, skompilowanych dla wydań stabilnych;
f-strings (sformatowane literały poprzedzone „f”) zapewniają obsługę operatora = (na przykład „f'{expr=}'”), który umożliwia konwersję wyrażenia na tekst w celu łatwiejszego debugowania. Na przykład: