Python 3.10

Python 3.10.0 (lopullinen) julkaistiin 4. lokakuuta 2021. Versioon 3.10 sisältyvät ominaisuudet on määritelty dokumentissa PEP 619, ja yksityiskohtainen kuvaus muutoksista löytyy dokumentista What’s New in Python 3.10.

Uudet syntaksiominaisuudet

Tila

PEP 634

Structural Pattern Matching: Specification

[1]

PEP 635

Structural Pattern Matching: Motivation and Rationale

[1]

PEP 636

Structural Pattern Matching: Tutorial

[1]

bpo-12782

Suluissa olevat kontekstinhallintaobjektit ovat nyt virallisesti sallittuja

Uudet ominaisuudet vakiokirjastossa

PEP 618

Valinnaisen pituuden tarkistuksen lisääminen funktioon zip

Tulkin parannukset

PEP 626

Tarkat rivinumerot virheenkorjausta ja muita työkaluja varten

Uudet tyypitysominaisuudet

PEP 604

Uniontyyppien kirjoittaminen muodossa X | Y

PEP 613

Eksplisiittiset tyyppialiakset

PEP 612

Parametrimäärittelymuuttujat

Tärkeät vanhentumiset, poistot tai rajoitukset

PEP 644

Vaaditaan OpenSSL 1.1.1 tai uudempi

PEP 632

Vanhennetaan distutils-moduuli.

Ei oleellinen

PEP 623

Vanhennetaan wstr-jäsen objektissa PyUnicodeObject ja valmistaudutaan sen poistoon.

Ei oleellinen

PEP 624

Poistetaan Py_UNICODE-koodaimen API:t

Ei oleellinen

PEP 597

Lisätään valinnainen EncodingWarning

Muut kielimuutokset:

Tyypillä int on uusi metodi int.bit_count(), joka palauttaa ykkösten määrän annetun kokonaisluvun binääriesityksessä; tätä kutsutaan myös nimellä population count.

Metodien dict.keys(), dict.values() ja dict.items() palauttamilla näkymillä on nyt kaikilla mapping-attribuutti, joka antaa types.MappingProxyType -objektin, joka kääräisee alkuperäisen sanakirjan.

PEP 618: Funktiolla zip() on nyt valinnainen strict-lippu, jolla voidaan vaatia, että kaikki iteroitavat ovat yhtä pitkiä.

Sisäänrakennetut ja laajennusfunktiot, jotka ottavat kokonaislukuargumentteja, eivät enää hyväksy Decimal-arvoja, Fraction-arvoja eivätkä muita objekteja, jotka voidaan muuntaa kokonaisluvuiksi vain tietoa menettäen (esim. joilla on metodi __int__() mutta ei metodia __index__()).

Jos object.__ipow__() palauttaa arvon NotImplemented, operaattori palautuu odotetusti oikein metodeihin object.__pow__() ja object.__rpow__().

Sijoituslausekkeita voi nyt käyttää ilman sulkuja joukkoliteraaleissa ja joukkojen muodostuslausekkeissa sekä sekvenssi-indekseissä (mutta ei viipaleissa).

Funktioilla on uusi __builtins__-attribuutti, jota käytetään sisäänrakennettujen symbolien etsimiseen funktion suorituksen aikana sen sijaan, että katsottaisiin kohteeseen __globals__['__builtins__']. Attribuutti alustetaan arvosta __globals__["__builtins__"], jos se on olemassa, muutoin nykyisistä sisäänrakennetuista.

Lisätty on kaksi uutta sisäänrakennettua funktiota – aiter() ja anext(), jotka tarjoavat asynkroniset vastineet funktioille iter() ja next().

Staattiset metodit (@staticmethod) ja luokkametodit (@classmethod) perivät nyt metodien attribuutit (__module__, __name__, __qualname__, __doc__, __annotations__) ja niillä on uusi __wrapped__-attribuutti. Lisäksi staattisia metodeja voi nyt kutsua tavallisina funktioina.

Monimutkaisten kohteiden annotaatiot (kaikki muut paitsi PEP 526:ssä määritellyt simple name -kohteet) eivät enää aiheuta mitään suoritusaikaisia vaikutuksia, kun käytössä on from __future__ import annotations.

Luokka- ja moduuliobjektit luovat nyt tyhjät annotaatiosanakirjat laiskasti tarvittaessa. Annotaatiosanakirjat tallennetaan objektin __dict__-rakenteeseen taaksepäin yhteensopivuuden vuoksi. Tämä parantaa parhaita käytäntöjä työskenneltäessä __annotations__-attribuutin kanssa.

Annotaatiot, jotka koostuvat lausekkeista yield, yield from, await tai nimetyistä lausekkeista, ovat nyt kiellettyjä käytettäessä from __future__ import annotations niiden sivuvaikutusten vuoksi.

Sitomattomien muuttujien, super()-kutsun ja muiden symbolitaulun käsittelyä mahdollisesti muuttavien lausekkeiden käyttö annotaatioissa on nyt tehoton, kun käytössä on from __future__ import annotations.

Sekä tyypin float että tyypin decimal.Decimal NaN-arvojen tiivisteet riippuvat nyt objektin identiteetistä. Aiemmin ne tiivistyivät aina arvoon 0, vaikka NaN-arvot eivät ole keskenään yhtä suuria. Tämä saattoi aiheuttaa neliöllistä suoritusaikaista käyttäytymistä liiallisten tiivistetörmäysten vuoksi luotaessa useita NaN-arvoja sisältäviä sanakirjoja ja joukkoja.

Vakion __debug__ poistaminen aiheuttaa nyt poikkeuksen SyntaxError (eikä NameError).

Poikkeuksilla SyntaxError on nyt attribuutit end_lineno ja end_offset. Ne ovat None, jos niitä ei pystytä määrittämään.

Muutokset sisäänrakennettuihin moduuleihin:

asyncio

Lisätään puuttuva metodi connect_accepted_socket().

array

Luokan array.array metodilla index() on nyt valinnaiset parametrit start ja stop.

gc

Lisätään auditointikoukut funktioille gc.get_objects(), gc.get_referrers() ja gc.get_referents().

hashlib

hashlib-moduuli vaatii OpenSSL 1.1.1:n tai uudemman.

hashlib-moduulissa on alustava tuki OpenSSL 3.0.0:lle.

Funktion pbkdf2_hmac() puhdas Python-varatoteutus on vanhennettu. Jatkossa PBKDF2-HMAC on käytettävissä vain, kun Python on käännetty OpenSSL-tuella.

os

Lisätään os.cpu_count() -tuki VxWorks RTOS:lle.

Lisätään uusi funktio os.eventfd() ja siihen liittyvät apufunktiot, jotka kääräisevät Linuxin eventfd2-järjestelmäkutsun.

Lisätään os.splice(), jolla voidaan siirtää tietoa kahden tiedostokuvaajan välillä ilman kopiointia ytimen osoiteavaruuden ja käyttäjän osoiteavaruuden välillä, missä toisen tiedostokuvaajan on viitattava putkeen.

Lisätään O_EVTONLY, O_FSYNC, O_SYMLINK ja O_NOFOLLOW_ANY macOS:lle.

platform

Lisätään platform.freedesktop_os_release(), jolla haetaan käyttöjärjestelmän tunnistetiedot freedesktop.org os-release -standarditiedostosta.

socket

Poikkeus socket.timeout on nyt poikkeuksen TimeoutError alias.

Lisätään mahdollisuus luoda MPTCP-soketteja arvolla IPPROTO_MPTCP.

Lisätään IP_RECVTOS-asetus palvelutyypin (ToS) tai DSCP/ECN-kenttien vastaanottamiseksi.

ssl

ssl-moduuli vaatii OpenSSL 1.1.1:n tai uudemman.

ssl-moduulissa on alustava tuki OpenSSL 3.0.0:lle ja uusi asetus OP_IGNORE_UNEXPECTED_EOF.

Vanhennettujen funktioiden ja vanhennettujen vakioiden käyttö aiheuttaa nyt poikkeuksen DeprecationWarning. Attribuutissa ssl.SSLContext.options on oletuksena asetettuna OP_NO_SSLv2 ja OP_NO_SSLv3, joten se ei voi varoittaa lipun asettamisesta uudelleen.

ssl-moduulissa on nyt turvallisemmat oletusasetukset. Salaukset ilman edelleen salassapitoa (forward secrecy) tai SHA-1 MAC:lla on oletuksena poistettu käytöstä. Turvallisuustaso 2 kieltää heikot RSA-, DH- ja ECC-avaimet, joiden turvallisuus on alle 112 bittiä. Luokka SSLContext käyttää oletuksena vähimmäisprotokollaversiota TLS 1.2. Asetukset perustuvat Hynek Schlawackin tutkimukseen.

Vanhentuneita protokollia SSL 3.0, TLS 1.0 ja TLS 1.1 ei enää virallisesti tueta. Python ei estä niitä aktiivisesti. OpenSSL:n käännösvalinnat, jakelujen kokoonpanot, valmistajien korjaukset ja salausvalikoimat voivat kuitenkin estää onnistuneen kättelyn.

Lisätään timeout-parametri funktioon ssl.get_server_certificate().

ssl-moduuli käyttää heap-tyyppejä ja monivaiheista alustusta.

Lisätty on uusi varmennuslippu VERIFY_X509_PARTIAL_CHAIN.

sys

Lisätään sys.orig_argv -attribuutti: lista alkuperäisistä komentoriviargumenteista, jotka välitettiin Python-suoritettavalle.

Lisätään sys.stdlib_module_names, joka sisältää listan vakiokirjaston moduulinimistä.

_thread

_thread.interrupt_main() ottaa nyt valinnaisen signaalinumeron simuloitavaksi (oletus on edelleen signal.SIGINT).

Huomautukset