Python 3.10 -ohjelmointikielen julkaisu

Vuoden kehitystyön jälkeen esitellään merkittävä Python 3.10 -ohjelmointikielen julkaisu. Uutta haaraa tuetaan puolitoista vuotta, jonka jälkeen sille kehitetään vielä kolme ja puoli vuotta haavoittuvuuksien korjaamiseen.

Samaan aikaan aloitettiin Python 3.11 -haaran alfatestaus (uuden kehitysaikataulun mukaisesti uuden haaran työ alkaa viisi kuukautta ennen edellisen haaran julkaisua ja siirtyy alfatestausvaiheeseen seuraavan julkaisun aikaan ). Python 3.11 -haara tulee olemaan alfajulkaisussa seitsemän kuukauden ajan, jonka aikana uusia ominaisuuksia lisätään ja vikoja korjataan. Tämän jälkeen beta-versioita testataan kolmen kuukauden ajan, jonka aikana uusien ominaisuuksien lisääminen on kielletty ja kaikki huomio kiinnitetään bugien korjaamiseen. Viimeiset kaksi kuukautta ennen julkaisua haara on julkaisuehdokasvaiheessa, jolloin suoritetaan lopullinen stabilointi.

Uusia lisäyksiä Python 3.10:een ovat:

  • Toteutetut "match"- ja "case"-operaattorit kuvioiden sovittamiseen, jotka parantavat koodin luettavuutta, yksinkertaistavat mielivaltaisten Python-objektien sovittamista ja lisäävät koodin luotettavuutta edistyneen staattisen tyyppitarkistuksen avulla. Toteutus muistuttaa paljolti Scalassa, Rustissa ja F#:ssa tarjottua "match"-operaattoria, joka vertaa tietyn lausekkeen tulosta "case"-operaattorin perusteella lohkoina lueteltuihin kuvioluetteloon.

    def http_error(status): vastaavuuden tila: tapaus 400: palauta "Huono pyyntö" -tapaus 401|403|404: palauta "Ei sallittu" tapaus 418: palauta "Olen teekannu" -tapaus _: palauta "Jotain muuta"

    Voit purkaa objektit, monikot, luettelot ja mielivaltaiset sekvenssit sitoaksesi muuttujia olemassa olevien arvojen perusteella. On sallittua määrittää sisäkkäisiä malleja, käyttää "jos"-lisäehtoja mallissa, käyttää maskeja ("[x, y, *rest]"), avain/arvo-määrityksiä (esim. {"kaistanleveys": b, "latenssi" ”: l} poimia "kaistanleveys" ja "latenssi"-arvot sanakirjasta, poimia alimalleja (":="-operaattori), käytä nimettyjä vakioita mallissa. Luokissa on mahdollista mukauttaa täsmäytyskäyttäytymistä "__match__()" -menetelmällä.

    tietoluokista tuonti dataluokka @tietoluokka luokka Piste: x: int y: int def whereis(piste): täsmäytyspiste: kirjainkoko Piste(0, 0): print("Alkuperä") case Piste(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Jossain muualla") case _: print("Ei piste") vastaa piste: kirjainkoko Piste(x, y) jos x == y: print(f"Y=X at {x}") case Piste(x, y): print(f"Ei diagonaalissa") PUNAINEN, VIHREÄ, SININEN = 0, 1, 2 vastaa väriä: kotelo PUNAINEN: print("Näen punaista!") kotelo VIHREÄ: print("Ruoho on vihreä") kotelo SININEN: print("Minä tunnen sinisen :(")

  • Nyt on mahdollista käyttää sulkeita kanssa-käskyssä jakaaksesi kontekstinhallintajoukon määritelmän useille riveille. Pilkku saa myös jättää ryhmän viimeisen kontekstinhallinnan perään: ( CtxManager1() esimerkkinä1, CtxManager2() esimerkkinä2, CtxManager3() esimerkkinä3, ): ...
  • Parannettu raportointi koodin sijainnista virheistä, jotka liittyvät sulkemattomiin aaltosulkeisiin ja lainausmerkkeihin merkkijonoliteraaaleissa. Esimerkiksi, kun on sulkematon aaltosulu, sen sijaan, että osoitin raportoiisi syntaksivirheestä seuraavassa konstruktiossa, osoitin korostaa nyt aloitussulkua ja osoittaa, että sulkevaa lohkoa ei ole. Tiedosto "example.py", rivi 1 odotettu = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^Syntaksivirhe: '{' ei ollut koskaan suljettu

    Lisätty erityisiä syntaksivirheilmoituksia: ":"-symboli puuttuu lohkon edessä ja sanakirjoissa, lukua ei eroteta suluilla, luetteloista puuttuu pilkku, "kokeile"-lohkon määrittäminen ilman "paitsi" ja "lopuksi", käyttämällä "=" " = " = =" sijaan vertailuissa, määrittämällä *-lausekkeet f-merkkijonoissa. Lisäksi se varmistaa, että koko ongelmallinen lauseke on korostettu, ei vain alku, ja selkeämpi tieto virheelliseen sisennykseen liittyvien virheiden kontekstista. >>> def foo(): … if lel: … x = 2 Tiedosto “”, rivi 3 x = 2 ^ IndentationError: odotettiin sisennettyä lohkoa if-lauseen jälkeen rivillä 2

    Virheissä, jotka johtuvat funktion attribuuttien ja muuttujien nimien kirjoitusvirheistä, tulostetaan suositus oikealla nimellä. >>> collections.namedtoplo Traceback (viimeisin soitto viimeksi): Tiedosto "", rivi 1, AttributeError: moduulilla 'collections' ei ole attribuuttia 'namedtoplo'. Tarkoititko: namedtuple?

  • Vianetsintätyökaluja ja profiloijia varten jäljitystapahtumat toimitetaan suoritetun koodin tarkalla rivinumerolla.
  • Lisätty sys.flags.warn_default_encoding-asetus, joka näyttää varoituksen mahdollisista virheistä, jotka liittyvät TextIOWrapperiin ja open()-prosessointiin UTF-8-koodattuihin tiedostoihin, ilman että "encoding=»utf-8"-vaihtoehtoa erikseen määritetään (ascII-koodausta käytetään oletuksena). Uusi julkaisu tarjoaa myös mahdollisuuden määrittää 'encoding="locale"'-arvo määrittääksesi koodauksen nykyisen kielen perusteella.
  • Kirjoitusmoduuliin on lisätty uusi operaattori, joka tarjoaa työkalut tyyppimerkintöjen määrittämiseen mahdollistaen syntaksin "X | Y" valitaksesi yhden tyypeistä (X-tyyppi tai Y-tyyppi). def square(luku: int | float) -> int | float: palautusnumero ** 2 vastaa aiemmin tuettua konstruktia: def square(luku: Union[int, float]) -> Union[int, float]: paluunumero ** 2
  • Kirjoitusmoduuliin on lisätty Concatenate-operaattori ja ParamSpec-muuttuja, joiden avulla voit välittää lisätietoja staattista tyyppitarkistusta varten Callable-toimintoa käytettäessä. Kirjoitusmoduuli lisää myös erityisiä arvoja TypeGuard tyyppisuojaustoimintojen merkitsemiseen ja TypeAlias ​​tyyppialiaksen määrittämiseen. StrCache: TypeAlias = ‘Välimuisti[str]’ # tyyppialias
  • Zip()-funktio toteuttaa valinnaisen "tiukka" lipun, joka määritettynä tarkistaa, ovatko iteroitavat argumentit samanpituisia. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['maksu', 'fi', 'fo', 'fum'], strict=True)) Traceback (viimeisin puhelu viimeisin ): … ValueError: zip()-argumentti 2 on pidempi kuin argumentti 1
  • Uusia sisäänrakennettuja funktioita aiter() ja anext() ehdotetaan asynkronisten analogien toteuttamiseksi funktioille iter() ja next().
  • Str(), bytes() ja bytearray()-konstruktoreiden työskentely pienten objektien kanssa on nopeutunut 30-40 %.
  • Vähensi tuontitoimintojen määrää runpy-moduulissa. Komento "python3 -m moduulin_nimi" toimii nyt keskimäärin 1.4 kertaa nopeammin, koska tuotujen moduulien määrä on vähentynyt 69:stä 51:een.
  • LOAD_ATTR-käsky käyttää välimuistimekanismia yksittäisille opkoodeille, mikä mahdollisti työskentelyn tavanomaisten attribuuttien kanssa jopa 36 % ja paikoilla jopa 44 %.
  • Kun rakennat Pythonia "--enable-optimizations"-vaihtoehdolla, "-fno-semantic-interposition" -tila on nyt käytössä, mikä mahdollistaa tulkin nopeuttamisen jopa 30 % verrattuna rakentamiseen "--enable-shared". ”vaihtoehto.
  • Hashlib- ja ssl-moduulit ovat lisänneet OpenSSL 3.0.0 -tuen ja lopettaneet 1.1.1:tä vanhempien OpenSSL-versioiden tukemisen.
  • Vanha jäsentäjä on poistettu, ja se korvattiin edellisessä haarassa PEG (Parsing Expression Grammar) jäsentimellä. Muotoilumoduuli on poistettu. Silmukkaparametri on poistettu asyncio-sovellusliittymästä. Aiemmin vanhentuneet menetelmät on poistettu. Py_UNICODE_str*-funktiot, jotka käsittelevät Py_UNICODE*-merkkijonoja, on poistettu.
  • Distutils-moduuli on vanhentunut ja se on ajoitettu poistettavaksi Python 3.12:ssa. Distutilsin sijaan on suositeltavaa käyttää setuptools-, pakkaus-, alusta-, shutil-, aliprosessi- ja sysconfig-moduuleja. PyUnicodeObjectin wstr-rakenne on vanhentunut ja ajoitettu poistettavaksi.

Lähde: opennet.ru

Lisää kommentti