Python 3.6

Python 3.6 beta 1 został wydany 12 września 2016 r., a podsumowanie nowych funkcji można znaleźć tutaj:

Nowe funkcje składni

Status

PEP 498

Formatowanie literałów napisowych

Ukończone

PEP 515

Podkreślenia w literałach liczbowych

Ukończone

PEP 525

Asynchroniczne generatory

PEP 526

Składnia adnotacji zmiennych (wstępna)

Ukończone

PEP 530

Asynchroniczne wyrażenia listowe

Nowe funkcje wbudowane

PEP 468

Zachowanie kolejności kwargs w funkcji

PEP 487

Prostsze dostosowywanie tworzenia klas

Częściowe [1]

PEP 520

Zachowanie kolejności definicji atrybutów klasy

Zmiany w bibliotece standardowej

PEP 495

Ujednoznacznienie czasu lokalnego

PEP 506

Dodanie modułu secrets do biblioteki standardowej

PEP 519

Dodanie protokołu ścieżek systemu plików

Wnętrze CPython

PEP 509

Dodanie prywatnej wersji do dict

Nie zostanie wykonane

PEP 523

Dodanie API ewaluacji ramki do CPython

Zmiany dla Linux/Windows

PEP 524

Uczynienie os.urandom() blokującym w Linuksie (podczas uruchamiania systemu)

PEP 528

Zmiana kodowania konsoli Windows na UTF-8

PEP 529

Zmiana kodowania systemu plików Windows na UTF-8

Inne zmiany w języku:

Instrukcja global lub nonlocal musi teraz tekstowo wystąpić przed pierwszym użyciem dotkniętej nazwy w tym samym zakresie. Wcześniej było to SyntaxWarning.

Można teraz ustawić metodę specjalną na None, aby wskazać, że odpowiadająca jej operacja nie jest dostępna. Na przykład jeśli klasa ustawia __iter__() na None, klasa nie jest iterowalna.

Długie sekwencje powtarzających się linii śladu wywołań są teraz skracane jako [Previous line repeated {count} more times]

Import zgłasza teraz nowy wyjątek ModuleNotFoundError, gdy nie może znaleźć modułu. Kod, który obecnie sprawdza ImportError (w try-except), nadal będzie działał.

Metody klasowe polegające na super() bez argumentów będą teraz działać poprawnie, gdy są wywoływane z metod metaklasy podczas tworzenia klasy.

Zmiany w modułach wbudowanych:

array

Wyczerpane iteratory array.array pozostaną teraz wyczerpane, nawet jeśli iterowana tablica zostanie rozszerzona.

binascii

Funkcja b2a_base64() akceptuje teraz opcjonalny argument słowa kluczowego newline kontrolujący, czy znak nowej linii jest dołączany do zwracanej wartości

Ukończone

cmath

Dodano nową stałą cmath.tau (τ)

Nowe stałe: cmath.inf i cmath.nan odpowiadające math.inf i math.nan, a także cmath.infj i cmath.nanj odpowiadające formatowi używanemu przez repr liczb zespolonych

collections

Dodano nową abstrakcyjną klasę bazową Collection reprezentującą iterowalne klasy kontenerów o określonym rozmiarze

Nowa abstrakcyjna klasa bazowa Reversible reprezentuje klasy iterowalne, które udostępniają także metodę __reversed__().

Nowa abstrakcyjna klasa bazowa AsyncGenerator reprezentuje generatory asynchroniczne.

Funkcja namedtuple() akceptuje teraz opcjonalny argument słowa kluczowego module, który, gdy jest określony, jest używany dla atrybutu __module__ zwracanej klasy nazwanej krotki.

Argumenty verbose i rename funkcji namedtuple() są teraz dostępne tylko jako słowa kluczowe.

Rekurencyjne instancje collections.deque mogą być teraz piklowane.

hashlib

Do modułu dodano funkcje skrótu BLAKE2. blake2b() i blake2s() są zawsze dostępne i obsługują pełny zestaw funkcji BLAKE2.

Dodano funkcje skrótu SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512() oraz funkcje skrótu SHAKE shake_128() i shake_256().

Funkcja wyprowadzania klucza na podstawie hasła scrypt() jest teraz dostępna z OpenSSL 1.1.0 i nowszymi.

json

json.load() i json.loads() obsługują teraz dane wejściowe w postaci binarnej. Zakodowany JSON powinien być reprezentowany przy użyciu UTF-8, UTF-16 lub UTF-32.

math

Dodano nową stałą math.tau (τ)

Ukończone

os

Nowa metoda close() pozwala jawnie zamknąć iterator scandir(). Iterator scandir() obsługuje teraz protokół menedżera kontekstu.

W Linuksie os.urandom() blokuje teraz działanie, dopóki pula entropii urandom systemu nie zostanie zainicjowana, aby zwiększyć bezpieczeństwo.

Wywołanie systemowe Linux getrandom() (pobierz losowe bajty) jest teraz udostępnione jako nowa funkcja os.getrandom().

re

Dodano obsługę zakresów modyfikatorów w wyrażeniach regularnych. Przykłady: «(?i:p)ython» pasuje do «python» i «Python», ale nie do «PYTHON»; «(?i)g(?-i:v)r» pasuje do «GvR» i «gvr», ale nie do «GVR».

Grupy obiektu dopasowania mogą być dostępne przez __getitem__, co jest równoważne group(). Tak więc mo[«name»] jest teraz równoważne mo.group(«name»).

Obiekty dopasowania obsługują teraz obiekty przypominające indeksy jako indeksy grup.

socket

Funkcja ioctl() obsługuje teraz kod sterujący SIO_LOOPBACK_FAST_PATH.

Stałe getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC i SO_PASSSEC są teraz obsługiwane.

setsockopt() obsługuje teraz formę setsockopt(level, optname, None, optlen: int).

Moduł socket obsługuje teraz rodzinę adresów AF_ALG do współpracy z API kryptograficznym jądra Linux. Dodano ALG_, SOL_ALG i sendmsg_afalg().

Dodano nowe stałe Linuksa TCP_USER_TIMEOUT i TCP_CONGESTION.

ssl

ssl obsługuje OpenSSL 1.1.0. Minimalną zalecaną wersją jest 1.0.2.

3DES został usunięty z domyślnych zestawów szyfrów, a dodano zestawy szyfrów ChaCha20 Poly1305.

SSLContext ma teraz lepszą domyślną konfigurację opcji i szyfrów.

Sesję SSL można skopiować z jednego połączenia po stronie klienta do innego za pomocą nowej klasy SSLSession. Wznowienie sesji TLS może przyspieszyć początkowe uzgadnianie, zmniejszyć opóźnienie i poprawić wydajność.

Nowa metoda get_ciphers() może być użyta do uzyskania listy włączonych szyfrów w kolejności ich priorytetu.

Wszystkie stałe i flagi zostały przekonwertowane na IntEnum i IntFlags.

Dodano specyficzne dla serwera i klienta protokoły TLS dla SSLContext.

Dodano SSLContext.post_handshake_auth w celu włączenia oraz ssl.SSLSocket.verify_client_post_handshake() w celu zainicjowania uwierzytelniania po uzgadnianiu w TLS 1.3.

struct

obsługuje teraz liczby zmiennoprzecinkowe IEEE 754 o połowicznej precyzji za pomocą specyfikatora formatu «e».

sys

Nowa funkcja getfilesystemencodeerrors() zwraca nazwę trybu błędów używanego do konwersji między nazwami plików w Unicode a nazwami plików w bajtach.

zlib

Funkcje compress() i decompress() akceptują teraz argumenty słów kluczowych

Uwagi