Python 3.10

Python 3.10.0 (slutgiltig) släpptes den 4 oktober 2021. Funktionerna för 3.10 definieras i PEP 619 och en detaljerad beskrivning av ändringarna finns i What’s New in Python 3.10.

Nya syntaxfunktioner

Status

PEP 634

Strukturell mönstermatchning: specifikation

[1]

PEP 635

Strukturell mönstermatchning: motivering och resonemang

[1]

PEP 636

Strukturell mönstermatchning: handledning

[1]

bpo-12782

Kontexthanterare inom parentes är nu officiellt tillåtna

Nya funktioner i standardbiblioteket

PEP 618

Lägg till valfri längdkontroll till zip

Förbättringar av tolken

PEP 626

Exakta radnummer för felsökning och andra verktyg

Nya typningsfunktioner

PEP 604

Tillåt att skriva unionstyper som X | Y

PEP 613

Explicita typalias

PEP 612

Parameterspecifikationsvariabler

Viktiga utfasningar, borttagningar eller begränsningar

PEP 644

Kräv OpenSSL 1.1.1 eller nyare

PEP 632

Fasa ut modulen distutils.

Inte relevant

PEP 623

Fasa ut och förbered borttagningen av medlemmen wstr i PyUnicodeObject.

Inte relevant

PEP 624

Ta bort kodnings-API:erna för Py_UNICODE

Inte relevant

PEP 597

Lägg till valfri EncodingWarning

Övriga språkändringar:

Typen int har en ny metod int.bit_count() som returnerar antalet ettor i den binära expansionen av ett givet heltal, även känt som population count.

Vyerna som returneras av dict.keys(), dict.values() och dict.items() har nu alla ett attribut mapping som ger ett types.MappingProxyType-objekt som omsluter den ursprungliga ordlistan.

PEP 618: Funktionen zip() har nu en valfri flagga strict som används för att kräva att alla itererbara objekt har samma längd.

Inbyggda funktioner och tilläggsfunktioner som tar heltalsargument accepterar inte längre Decimals, Fractions och andra objekt som endast kan konverteras till heltal med en förlust (t.ex. som har metoden __int__() men inte har metoden __index__()).

Om object.__ipow__() returnerar NotImplemented kommer operatorn korrekt att falla tillbaka på object.__pow__() och object.__rpow__() som förväntat.

Tilldelningsuttryck kan nu användas utan parentes inom mängdliteraler och mängdomfattningar, samt i sekvensindex (men inte i utsnitt).

Funktioner har ett nytt attribut __builtins__ som används för att leta efter inbyggda symboler när en funktion körs, i stället för att leta i __globals__['__builtins__']. Attributet initieras från __globals__["__builtins__"] om det finns, annars från de aktuella inbyggda funktionerna.

Två nya inbyggda funktioner – aiter() och anext() har lagts till för att tillhandahålla asynkrona motsvarigheter till iter() respektive next().

Statiska metoder (@staticmethod) och klassmetoder (@classmethod) ärver nu metodattributen (__module__, __name__, __qualname__, __doc__, __annotations__) och har ett nytt attribut __wrapped__. Dessutom kan statiska metoder nu anropas som vanliga funktioner.

Annoteringar för komplexa mål (allt utöver simple name-mål som definieras av PEP 526) orsakar inte längre några körtidseffekter med from __future__ import annotations.

Klass- och modulobjekt skapar nu tomma annoteringsordlistor lättjefullt vid behov. Annoteringsordlistorna lagras i objektets __dict__ för bakåtkompatibilitet. Detta förbättrar de bästa metoderna för att arbeta med __annotations__.

Annoteringar som består av yield, yield from, await eller namngivna uttryck är nu förbjudna under from __future__ import annotations på grund av deras sidoeffekter.

Användning av obundna variabler, super() och andra uttryck som kan ändra bearbetningen av symboltabellen som annoteringar saknar nu effekt under from __future__ import annotations.

Hashvärden för NaN-värden av både typen float och typen decimal.Decimal beror nu på objektidentitet. Tidigare hashades de alltid till 0 även om NaN-värden inte är lika med varandra. Detta orsakade potentiellt kvadratiskt körtidsbeteende på grund av överdrivna hashkollisioner vid skapande av ordlistor och mängder som innehåller flera NaN-värden.

Ett SyntaxError (i stället för ett NameError) genereras nu vid borttagning av konstanten __debug__.

SyntaxError-undantag har nu attributen end_lineno och end_offset. De kommer att vara None om de inte fastställs.

Ändringar i inbyggda moduler:

asyncio

Lägg till den saknade metoden connect_accepted_socket().

array

Metoden index() i array.array har nu valfria parametrar start och stop.

gc

Lägg till granskningskrokar för gc.get_objects(), gc.get_referrers() och gc.get_referents().

hashlib

Modulen hashlib kräver OpenSSL 1.1.1 eller nyare.

Modulen hashlib har preliminärt stöd för OpenSSL 3.0.0.

Den rena Python-reservlösningen för pbkdf2_hmac() är utfasad. I framtiden kommer PBKDF2-HMAC endast att vara tillgängligt när Python har byggts med OpenSSL-stöd.

os

Lägg till stöd för os.cpu_count() för VxWorks RTOS.

Lägg till en ny funktion os.eventfd() och relaterade hjälpfunktioner för att omsluta systemanropet eventfd2 på Linux.

Lägg till os.splice() som gör det möjligt att flytta data mellan två filbeskrivare utan att kopiera mellan kärnans adressutrymme och användarens adressutrymme, där en av filbeskrivarna måste referera till en pipe.

Lägg till O_EVTONLY, O_FSYNC, O_SYMLINK och O_NOFOLLOW_ANY för macOS.

platform

Lägg till platform.freedesktop_os_release() för att hämta operativsystemets identifiering från standardfilen freedesktop.org os-release.

socket

Undantaget socket.timeout är nu ett alias för TimeoutError.

Lägg till möjlighet att skapa MPTCP-socklar med IPPROTO_MPTCP.

Lägg till alternativet IP_RECVTOS för att ta emot fälten type of service (ToS) eller DSCP/ECN.

ssl

Modulen ssl kräver OpenSSL 1.1.1 eller nyare.

Modulen ssl har preliminärt stöd för OpenSSL 3.0.0 och det nya alternativet OP_IGNORE_UNEXPECTED_EOF.

Utfasad funktion och användning av utfasade konstanter resulterar nu i ett DeprecationWarning. ssl.SSLContext.options har OP_NO_SSLv2 och OP_NO_SSLv3 inställda som standard och kan därför inte varna om att flaggan sätts igen.

Modulen ssl har nu säkrare standardinställningar. Chiffer utan framåtriktad sekretess eller SHA-1 MAC är inaktiverade som standard. Säkerhetsnivå 2 förbjuder svaga RSA-, DH- och ECC-nycklar med mindre än 112 bitars säkerhet. SSLContext har som standard lägsta protokollversion TLS 1.2. Inställningarna baseras på Hynek Schlawacks forskning.

De utfasade protokollen SSL 3.0, TLS 1.0 och TLS 1.1 stöds inte längre officiellt. Python blockerar dem inte aktivt. OpenSSL-byggalternativ, distrokonfigurationer, leverantörspatchar och chiffersviter kan dock förhindra en lyckad handskakning.

Lägg till en parameter timeout till funktionen ssl.get_server_certificate().

Modulen ssl använder heap-typer och flerfasinitiering.

En ny verifieringsflagga VERIFY_X509_PARTIAL_CHAIN har lagts till.

sys

Lägg till attributet sys.orig_argv: listan över de ursprungliga kommandoradsargumenten som skickades till Python-körbaren.

Lägg till sys.stdlib_module_names som innehåller listan över standardbibliotekets modulnamn.

_thread

_thread.interrupt_main() tar nu ett valfritt signalnummer att simulera (standardvärdet är fortfarande signal.SIGINT).

Anteckningar