Python 3.10

Python 3.10.0 (final) is uitgebracht op 4 oktober 2021. De functies voor 3.10 zijn gedefinieerd in PEP 619 en een gedetailleerde beschrijving van de wijzigingen is te vinden in What’s New in Python 3.10.

Nieuwe syntaxisfuncties

Status

PEP 634

Structural Pattern Matching: specificatie

[1]

PEP 635

Structural Pattern Matching: motivatie en grondgedachte

[1]

PEP 636

Structural Pattern Matching: tutorial

[1]

bpo-12782

Tussen haakjes geplaatste context managers zijn nu officieel toegestaan

Nieuwe functies in de standaardbibliotheek

PEP 618

Optionele lengtecontrole toevoegen aan zip

Verbeteringen aan de interpreter

PEP 626

Nauwkeurige regelnummers voor debugging en andere tools

Nieuwe typingfuncties

PEP 604

Het toestaan van het schrijven van union-typen als X | Y

PEP 613

Expliciete type-aliassen

PEP 612

Variabelen voor parameterspecificatie

Belangrijke deprecaties, verwijderingen of beperkingen

PEP 644

OpenSSL 1.1.1 of nieuwer vereisen

PEP 632

De distutils-module deprecaten.

Niet relevant

PEP 623

Het wstr-lid in PyUnicodeObject deprecaten en voorbereiden op de verwijdering ervan.

Niet relevant

PEP 624

De Py_UNICODE-encoder-API’s verwijderen

Niet relevant

PEP 597

Optionele EncodingWarning toevoegen

Overige taalwijzigingen:

Het int-type heeft een nieuwe methode int.bit_count(), die het aantal enen in de binaire expansie van een gegeven geheel getal teruggeeft, ook wel bekend als de population count.

De views die worden teruggegeven door dict.keys(), dict.values() en dict.items() hebben nu allemaal een mapping-attribuut dat een types.MappingProxyType-object geeft dat het oorspronkelijke dictionary omhult.

PEP 618: De functie zip() heeft nu een optionele strict-vlag, die wordt gebruikt om te vereisen dat alle iterables een gelijke lengte hebben.

Ingebouwde en extensiefuncties die gehele getallen als argument nemen, accepteren niet langer Decimals, Fractions en andere objecten die alleen met verlies naar gehele getallen kunnen worden geconverteerd (bijvoorbeeld die wel de methode __int__() hebben maar niet de methode __index__()).

Als object.__ipow__() NotImplemented teruggeeft, zal de operator zoals verwacht correct terugvallen op object.__pow__() en object.__rpow__().

Toewijzingsexpressies kunnen nu zonder haakjes worden gebruikt binnen set-literals en set-comprehensions, evenals in reeksindexen (maar niet in slices).

Functies hebben een nieuw __builtins__-attribuut dat wordt gebruikt om naar ingebouwde symbolen te zoeken wanneer een functie wordt uitgevoerd, in plaats van te kijken in __globals__['__builtins__']. Het attribuut wordt geïnitialiseerd vanuit __globals__["__builtins__"] indien dit bestaat, anders vanuit de huidige builtins.

Twee nieuwe ingebouwde functies – aiter() en anext() – zijn toegevoegd om asynchrone tegenhangers te bieden van respectievelijk iter() en next().

Statische methoden (@staticmethod) en klassemethoden (@classmethod) erven nu de methodeattributen (__module__, __name__, __qualname__, __doc__, __annotations__) en hebben een nieuw __wrapped__-attribuut. Bovendien zijn statische methoden nu aanroepbaar als gewone functies.

Annotaties voor complexe doelen (alles behalve de doelen met simple name gedefinieerd door PEP 526) veroorzaken niet langer enig runtime-effect met from __future__ import annotations.

Klasse- en module-objecten maken nu lui lege annotatie-dicts aan wanneer dat nodig is. De annotatie-dicts worden voor achterwaartse compatibiliteit opgeslagen in de __dict__ van het object. Dit verbetert de best practices voor het werken met __annotations__.

Annotaties die bestaan uit yield, yield from, await of benoemde expressies zijn nu verboden onder from __future__ import annotations vanwege hun bijwerkingen.

Het gebruik van niet-gebonden variabelen, super() en andere expressies die de verwerking van de symbooltabel kunnen veranderen, blijft als annotatie nu zonder effect onder from __future__ import annotations.

Hashes van NaN-waarden van zowel het float-type als het decimal.Decimal-type zijn nu afhankelijk van de objectidentiteit. Voorheen werden ze altijd naar 0 gehasht, ook al zijn NaN-waarden niet aan elkaar gelijk. Dit veroorzaakte potentieel kwadratisch runtime-gedrag door overmatige hashbotsingen bij het aanmaken van dictionaries en sets die meerdere NaN’s bevatten.

Er wordt nu een SyntaxError (in plaats van een NameError) opgeworpen bij het verwijderen van de constante __debug__.

SyntaxError-excepties hebben nu de attributen end_lineno en end_offset. Deze zijn None als ze niet bepaald zijn.

Wijzigingen aan ingebouwde modules:

asyncio

Ontbrekende methode connect_accepted_socket() toevoegen.

array

De methode index() van array.array heeft nu optionele start- en stop-parameters.

gc

Audit-hooks toevoegen voor gc.get_objects(), gc.get_referrers() en gc.get_referents().

hashlib

De hashlib-module vereist OpenSSL 1.1.1 of nieuwer.

De hashlib-module heeft voorlopige ondersteuning voor OpenSSL 3.0.0.

De zuiver Python-fallback van pbkdf2_hmac() is gedeprecieerd. In de toekomst zal PBKDF2-HMAC alleen beschikbaar zijn wanneer Python met OpenSSL-ondersteuning is gebouwd.

os

os.cpu_count()-ondersteuning voor VxWorks RTOS toevoegen.

Een nieuwe functie os.eventfd() en gerelateerde helpers toevoegen om de eventfd2-syscall op Linux te omhullen.

os.splice() toevoegen, waarmee gegevens tussen twee file descriptors kunnen worden verplaatst zonder te kopiëren tussen de adresruimte van de kernel en die van de gebruiker, waarbij een van de file descriptors naar een pipe moet verwijzen.

O_EVTONLY, O_FSYNC, O_SYMLINK en O_NOFOLLOW_ANY toevoegen voor macOS.

platform

platform.freedesktop_os_release() toevoegen om besturingssysteemidentificatie op te halen uit het standaardbestand freedesktop.org os-release.

socket

De exceptie socket.timeout is nu een alias van TimeoutError.

Optie toevoegen om MPTCP-sockets aan te maken met IPPROTO_MPTCP.

Optie IP_RECVTOS toevoegen om het type service (ToS) of de DSCP/ECN-velden te ontvangen.

ssl

De ssl-module vereist OpenSSL 1.1.1 of nieuwer.

De ssl-module heeft voorlopige ondersteuning voor OpenSSL 3.0.0 en een nieuwe optie OP_IGNORE_UNEXPECTED_EOF.

Gedeprecieerde functies en het gebruik van gedeprecieerde constanten resulteren nu in een DeprecationWarning. ssl.SSLContext.options heeft standaard OP_NO_SSLv2 en OP_NO_SSLv3 ingesteld en kan daarom niet waarschuwen wanneer de vlag opnieuw wordt ingesteld.

De ssl-module heeft nu veiligere standaardinstellingen. Ciphers zonder forward secrecy of met een SHA-1-MAC zijn standaard uitgeschakeld. Beveiligingsniveau 2 verbiedt zwakke RSA-, DH- en ECC-sleutels met minder dan 112 bits beveiliging. SSLContext gaat standaard uit van de minimale protocolversie TLS 1.2. De instellingen zijn gebaseerd op het onderzoek van Hynek Schlawack.

De gedeprecieerde protocollen SSL 3.0, TLS 1.0 en TLS 1.1 worden niet langer officieel ondersteund. Python blokkeert ze niet actief. OpenSSL-buildopties, distroconfiguraties, leveranciers-patches en cipher suites kunnen echter een geslaagde handshake verhinderen.

Een parameter timeout toevoegen aan de functie ssl.get_server_certificate().

De ssl-module gebruikt heap-types en meerfase-initialisatie.

Een nieuwe verificatievlag VERIFY_X509_PARTIAL_CHAIN is toegevoegd.

sys

Het attribuut sys.orig_argv toevoegen: de lijst met de oorspronkelijke commandoregel-argumenten die aan het Python-executable zijn doorgegeven.

sys.stdlib_module_names toevoegen, dat de lijst met namen van de standaardbibliotheekmodules bevat.

_thread

_thread.interrupt_main() neemt nu een optioneel signaalnummer om te simuleren (de standaard is nog steeds signal.SIGINT).

Opmerkingen