Python 3.10

Python 3.10.0 (final) izdan je 4. listopada 2021. Značajke za 3.10 definirane su u PEP 619, a detaljan opis promjena nalazi se u What’s New in Python 3.10.

Nove sintaktičke značajke

Status

PEP 634

Strukturno podudaranje uzoraka: specifikacija

[1]

PEP 635

Strukturno podudaranje uzoraka: motivacija i obrazloženje

[1]

PEP 636

Strukturno podudaranje uzoraka: vodič

[1]

bpo-12782

Upravitelji konteksta u zagradama sada su službeno dopušteni

Nove značajke u standardnoj biblioteci

PEP 618

Dodavanje neobavezne provjere duljine u zip

Poboljšanja interpretera

PEP 626

Precizni brojevi redaka za otklanjanje pogrešaka i druge alate

Nove značajke za tipove (typing)

PEP 604

Omogućavanje pisanja unijskih tipova kao X | Y

PEP 613

Eksplicitni aliasi tipova

PEP 612

Varijable za specifikaciju parametara

Važna zastarijevanja, uklanjanja ili ograničenja

PEP 644

Zahtijeva OpenSSL 1.1.1 ili noviji

PEP 632

Zastarijevanje modula distutils.

Nije relevantno

PEP 623

Zastarijevanje i priprema za uklanjanje člana wstr u PyUnicodeObject.

Nije relevantno

PEP 624

Uklanjanje API-ja za kodiranje Py_UNICODE

Nije relevantno

PEP 597

Dodavanje neobaveznog EncodingWarning

Ostale promjene jezika:

Tip int ima novu metodu int.bit_count(), koja vraća broj jedinica u binarnom zapisu zadanog cijelog broja, poznat i kao populacijski broj (population count).

Pogledi koje vraćaju dict.keys(), dict.values() i dict.items() sada svi imaju atribut mapping koji daje objekt types.MappingProxyType koji omata izvorni rječnik.

PEP 618: Funkcija zip() sada ima neobaveznu zastavicu strict koja se koristi za zahtijevanje da svi iterabilni objekti imaju jednaku duljinu.

Ugrađene funkcije i funkcije proširenja koje primaju cjelobrojne argumente više ne prihvaćaju Decimalove, Fractionove i druge objekte koji se mogu pretvoriti u cijele brojeve samo uz gubitak (npr. one koji imaju metodu __int__(), ali nemaju metodu __index__()).

Ako object.__ipow__() vrati NotImplemented, operator će se ispravno vratiti na object.__pow__() i object.__rpow__() kako se i očekuje.

Izrazi pridruživanja sada se mogu koristiti bez zagrada unutar literala skupova i izvedbi skupova (set comprehensions), kao i u indeksima sekvenci (ali ne i u rezovima).

Funkcije imaju novi atribut __builtins__ koji se koristi za traženje ugrađenih simbola pri izvršavanju funkcije, umjesto pretraživanja __globals__['__builtins__']. Atribut se inicijalizira iz __globals__["__builtins__"] ako postoji, inače iz trenutnih ugrađenih simbola.

Dodane su dvije nove ugrađene funkcije – aiter() i anext() – kako bi se osigurale asinkrone inačice funkcija iter() odnosno next().

Statičke metode (@staticmethod) i metode klase (@classmethod) sada nasljeđuju atribute metode (__module__, __name__, __qualname__, __doc__, __annotations__) i imaju novi atribut __wrapped__. Štoviše, statičke metode sada se mogu pozivati kao obične funkcije.

Anotacije za složene ciljeve (sve osim ciljeva simple name definiranih u PEP 526) više ne uzrokuju nikakve učinke tijekom izvođenja uz from __future__ import annotations.

Objekti klasa i modula sada lijeno (lazy) stvaraju prazne rječnike anotacija po potrebi. Rječnici anotacija pohranjuju se u objektov __dict__ radi povratne kompatibilnosti. Time se poboljšavaju najbolje prakse za rad s __annotations__.

Anotacije koje se sastoje od yield, yield from, await ili imenovanih izraza sada su zabranjene uz from __future__ import annotations zbog njihovih nuspojava.

Korištenje nepovezanih varijabli, super() i drugih izraza koji bi mogli izmijeniti obradu tablice simbola sada nemaju učinka kao anotacije uz from __future__ import annotations.

Hash vrijednosti NaN za tipove float i decimal.Decimal sada ovise o identitetu objekta. Ranije su uvijek imale hash 0 iako vrijednosti NaN nisu međusobno jednake. To je moglo uzrokovati potencijalno kvadratno ponašanje pri izvođenju zbog prekomjernih kolizija hashova pri stvaranju rječnika i skupova koji sadrže više NaN vrijednosti.

Pri brisanju konstante __debug__ sada se podiže iznimka SyntaxError (umjesto NameError).

Iznimke SyntaxError sada imaju atribute end_lineno i end_offset. Bit će None ako nisu utvrđeni.

Promjene u ugrađenim modulima:

asyncio

Dodana je nedostajuća metoda connect_accepted_socket().

array

Metoda index() klase array.array sada ima neobavezne parametre start i stop.

gc

Dodane su revizijske kuke (audit hooks) za gc.get_objects(), gc.get_referrers() i gc.get_referents().

hashlib

Modul hashlib zahtijeva OpenSSL 1.1.1 ili noviji.

Modul hashlib ima preliminarnu podršku za OpenSSL 3.0.0.

Čista Python implementacija (pure-Python fallback) funkcije pbkdf2_hmac() je zastarjela. Ubuduće će PBKDF2-HMAC biti dostupan samo kada je Python izgrađen s podrškom za OpenSSL.

os

Dodana je podrška za os.cpu_count() za VxWorks RTOS.

Dodana je nova funkcija os.eventfd() i pripadajući pomoćnici za omotavanje sistemskog poziva eventfd2 na Linuxu.

Dodana je os.splice() koja omogućuje premještanje podataka između dva opisnika datoteke bez kopiranja između adresnog prostora jezgre i korisničkog adresnog prostora, pri čemu jedan od opisnika datoteke mora upućivati na cijev (pipe).

Dodani su O_EVTONLY, O_FSYNC, O_SYMLINK i O_NOFOLLOW_ANY za macOS.

platform

Dodana je platform.freedesktop_os_release() za dohvaćanje identifikacije operacijskog sustava iz standardne datoteke freedesktop.org os-release.

socket

Iznimka socket.timeout sada je alias za TimeoutError.

Dodana je opcija za stvaranje MPTCP utičnica s IPPROTO_MPTCP.

Dodana je opcija IP_RECVTOS za primanje polja type of service (ToS) ili DSCP/ECN.

ssl

Modul ssl zahtijeva OpenSSL 1.1.1 ili noviji.

Modul ssl ima preliminarnu podršku za OpenSSL 3.0.0 i novu opciju OP_IGNORE_UNEXPECTED_EOF.

Zastarjele funkcije i korištenje zastarjelih konstanti sada rezultiraju iznimkom DeprecationWarning. ssl.SSLContext.options ima prema zadanim postavkama postavljene OP_NO_SSLv2 i OP_NO_SSLv3 te stoga ne može upozoriti na ponovno postavljanje zastavice.

Modul ssl sada ima sigurnije zadane postavke. Šifre bez prosljedne tajnosti (forward secrecy) ili SHA-1 MAC prema zadanim su postavkama onemogućene. Sigurnosna razina 2 zabranjuje slabe RSA, DH i ECC ključeve s manje od 112 bitova sigurnosti. SSLContext ima zadanu minimalnu verziju protokola TLS 1.2. Postavke se temelje na istraživanju Hyneka Schlawacka.

Zastarjeli protokoli SSL 3.0, TLS 1.0 i TLS 1.1 više nisu službeno podržani. Python ih ne blokira aktivno. Međutim, opcije izgradnje OpenSSL-a, konfiguracije distribucija, zakrpe dobavljača i skupovi šifri mogu spriječiti uspješno rukovanje (handshake).

Dodan je parametar timeout funkciji ssl.get_server_certificate().

Modul ssl koristi tipove na hrpi (heap-types) i višefaznu inicijalizaciju.

Dodana je nova zastavica provjere VERIFY_X509_PARTIAL_CHAIN.

sys

Dodan je atribut sys.orig_argv: popis izvornih argumenata naredbenog retka proslijeđenih Python izvršnoj datoteci.

Dodan je sys.stdlib_module_names, koji sadrži popis imena modula standardne biblioteke.

_thread

_thread.interrupt_main() sada prima neobavezni broj signala za simulaciju (zadana vrijednost i dalje je signal.SIGINT).

Napomene