Python 3.10

Python 3.10.0 (finální verze) byla vydána 4. října 2021. Funkce verze 3.10 jsou definovány v PEP 619 a podrobný popis změn naleznete v What’s New in Python 3.10.

Nové syntaktické funkce

Stav

PEP 634

Strukturální porovnávání vzorů: Specifikace

[1]

PEP 635

Strukturální porovnávání vzorů: Motivace a zdůvodnění

[1]

PEP 636

Strukturální porovnávání vzorů: Tutoriál

[1]

bpo-12782

Kontextové správce v závorkách jsou nyní oficiálně povoleni

Nové funkce ve standardní knihovně

PEP 618

Přidání volitelné kontroly délky do zip

Vylepšení interpretu

PEP 626

Přesná čísla řádků pro ladění a další nástroje

Nové funkce typování

PEP 604

Umožnění zápisu sjednocení typů jako X | Y

PEP 613

Explicitní aliasy typů

PEP 612

Proměnné pro specifikaci parametrů

Důležité zastaralé prvky, odstranění nebo omezení

PEP 644

Vyžaduje OpenSSL 1.1.1 nebo novější

PEP 632

Označení modulu distutils za zastaralý.

Není relevantní

PEP 623

Označení členu wstr v PyUnicodeObject za zastaralý a příprava na jeho odstranění.

Není relevantní

PEP 624

Odstranění API kodérů Py_UNICODE

Není relevantní

PEP 597

Přidání volitelného EncodingWarning

Další změny jazyka:

Typ int má novou metodu int.bit_count(), která vrací počet jedniček v binárním rozvoji daného celého čísla, známý také jako population count.

Pohledy vrácené metodami dict.keys(), dict.values() a dict.items() nyní všechny mají atribut mapping, který poskytuje objekt types.MappingProxyType obalující původní slovník.

PEP 618: Funkce zip() má nyní volitelný příznak strict, který slouží k vyžadování stejné délky všech iterovatelných objektů.

Vestavěné funkce a funkce z rozšíření, které přijímají celočíselné argumenty, již nepřijímají objekty Decimal, Fraction a jiné objekty, které lze na celá čísla převést pouze se ztrátou (např. ty, které mají metodu __int__(), ale nemají metodu __index__()).

Pokud object.__ipow__() vrátí NotImplemented, operátor správně spadne zpět na object.__pow__() a object.__rpow__(), jak se očekává.

Přiřazovací výrazy lze nyní použít bez závorek v literálech množin a generátorech množin, stejně jako v indexech sekvencí (ale ne ve výřezech).

Funkce mají nový atribut __builtins__, který se používá k vyhledávání vestavěných symbolů při spuštění funkce namísto vyhledávání v __globals__['__builtins__']. Atribut je inicializován z __globals__["__builtins__"], pokud existuje, jinak z aktuálních vestavěných symbolů.

Byly přidány dvě nové vestavěné funkce – aiter() a anext() – které poskytují asynchronní protějšky k iter(), respektive next().

Statické metody (@staticmethod) a metody třídy (@classmethod) nyní dědí atributy metody (__module__, __name__, __qualname__, __doc__, __annotations__) a mají nový atribut __wrapped__. Statické metody jsou navíc nyní volatelné jako běžné funkce.

Anotace pro složené cíle (vše kromě cílů typu simple name definovaných v PEP 526) již nezpůsobují žádné běhové efekty při použití from __future__ import annotations.

Objekty tříd a modulů nyní vytvářejí prázdné slovníky anotací líně na vyžádání. Slovníky anotací jsou kvůli zpětné kompatibilitě uloženy v atributu __dict__ objektu. To zlepšuje osvědčené postupy pro práci s __annotations__.

Anotace obsahující yield, yield from, await nebo pojmenované výrazy jsou nyní při použití from __future__ import annotations zakázány kvůli jejich vedlejším účinkům.

Použití nevázaných proměnných, super() a dalších výrazů, které by mohly změnit zpracování tabulky symbolů jako anotace, je nyní při použití from __future__ import annotations bez efektu.

Hashe hodnot NaN typu float i typu decimal.Decimal nyní závisí na identitě objektu. Dříve se vždy hashovaly na 0, přestože hodnoty NaN si nejsou navzájem rovny. To způsobovalo potenciálně kvadratické chování za běhu kvůli nadměrným kolizím hashů při vytváření slovníků a množin obsahujících více NaN.

Při mazání konstanty __debug__ bude nyní vyvolána výjimka SyntaxError (namísto NameError).

Výjimky SyntaxError nyní mají atributy end_lineno a end_offset. Pokud nejsou určeny, budou mít hodnotu None.

Změny ve vestavěných modulech:

asyncio

Přidání chybějící metody connect_accepted_socket().

array

Metoda index() třídy array.array má nyní volitelné parametry start a stop.

gc

Přidání auditních háčků pro gc.get_objects(), gc.get_referrers() a gc.get_referents().

hashlib

Modul hashlib vyžaduje OpenSSL 1.1.1 nebo novější.

Modul hashlib má předběžnou podporu pro OpenSSL 3.0.0.

Čistě Pythonová záložní implementace pbkdf2_hmac() je zastaralá. V budoucnu bude PBKDF2-HMAC dostupný pouze tehdy, pokud byl Python sestaven s podporou OpenSSL.

os

Přidání podpory os.cpu_count() pro VxWorks RTOS.

Přidání nové funkce os.eventfd() a souvisejících pomocníků, které obalují systémové volání eventfd2 v Linuxu.

Přidání os.splice(), která umožňuje přesouvat data mezi dvěma deskriptory souborů bez kopírování mezi adresním prostorem jádra a uživatelským adresním prostorem, přičemž jeden z deskriptorů souborů musí odkazovat na rouru.

Přidání O_EVTONLY, O_FSYNC, O_SYMLINK a O_NOFOLLOW_ANY pro macOS.

platform

Přidání platform.freedesktop_os_release() pro získání identifikace operačního systému ze standardního souboru freedesktop.org os-release.

socket

Výjimka socket.timeout je nyní aliasem pro TimeoutError.

Přidání možnosti vytvářet sokety MPTCP pomocí IPPROTO_MPTCP.

Přidání možnosti IP_RECVTOS pro příjem polí type of service (ToS) nebo DSCP/ECN.

ssl

Modul ssl vyžaduje OpenSSL 1.1.1 nebo novější.

Modul ssl má předběžnou podporu pro OpenSSL 3.0.0 a novou možnost OP_IGNORE_UNEXPECTED_EOF.

Zastaralé funkce a použití zastaralých konstant nyní vedou k DeprecationWarning. ssl.SSLContext.options má ve výchozím nastavení nastaveny OP_NO_SSLv2 a OP_NO_SSLv3, a proto nemůže varovat před opětovným nastavením tohoto příznaku.

Modul ssl má nyní bezpečnější výchozí nastavení. Šifry bez dopředného utajení nebo s MAC SHA-1 jsou ve výchozím nastavení zakázány. Úroveň zabezpečení 2 zakazuje slabé klíče RSA, DH a ECC s méně než 112 bity zabezpečení. SSLContext má jako výchozí minimální verzi protokolu TLS 1.2. Nastavení jsou založena na výzkumu Hynka Schlawacka.

Zastaralé protokoly SSL 3.0, TLS 1.0 a TLS 1.1 již nejsou oficiálně podporovány. Python je aktivně neblokuje. Avšak volby sestavení OpenSSL, konfigurace distribucí, dodavatelské záplaty a šifrovací sady mohou zabránit úspěšnému handshake.

Přidání parametru timeout do funkce ssl.get_server_certificate().

Modul ssl používá heap-types a vícefázovou inicializaci.

Byl přidán nový ověřovací příznak VERIFY_X509_PARTIAL_CHAIN.

sys

Přidání atributu sys.orig_argv: seznam původních argumentů příkazového řádku předaných spustitelnému souboru Pythonu.

Přidání sys.stdlib_module_names, který obsahuje seznam názvů modulů standardní knihovny.

_thread

_thread.interrupt_main() nyní přijímá volitelné číslo signálu, který se má simulovat (výchozí je stále signal.SIGINT).

Poznámky