Po półtora roku rozwoju główne wydanie języka programowania . Aktualizacje korygujące dla gałęzi Python 3.8 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ń.
Wśród dodanych :
- 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)) != ":
... - 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:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, s=30, d=40, e=50, f=60) - nowe API C
do skonfigurowania parametrów inicjalizacji Pythona, umożliwiając pełną kontrolę nad wszystkim oraz zapewnianie zaawansowanych funkcji obsługi błędów. Proponowany interfejs API ułatwia osadzanie funkcjonalności interpretera Pythona w innych aplikacjach C; - 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;
- 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 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 Wprowadzono kilka nowych funkcji:
- Klasa 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 , co pozwala ograniczyć parametr lub wartość zwracaną do kilku predefiniowanych wartości („Literal['połączony', 'rozłączony']").
- Projekt "", 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 lub opcja „-X pycache_prefix”;
- 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:
››› użytkownik = 'eric_idle'
››› członek_od = data(1975, 7, 31)
››› f'{user=} {member_since=}'
„user='eric_idle' member_since=datetime.date(1975, 7, 31)” - Wyrażenie "» można stosować wewnątrz bloku ;
- Dodano nowy moduł , umożliwiający wykorzystanie segmentów pamięci współdzielonej w konfiguracjach wieloprocesowych;
- Platforma Windows Implementacja asyncio została przeniesiona do używania klasy ;
- Wydajność instrukcji LOAD_GLOBAL została zwiększona o około 40% dzięki zastosowaniu nowego mechanizmu buforowania kodu obiektowego.
Źródło: opennet.ru
