Útgáfa af Python 3.10 forritunarmálinu

Eftir árs þróun er mikilvæg útgáfa Python 3.10 forritunarmálsins kynnt. Nýja útibúið verður stutt í eitt og hálft ár, eftir það í þrjú og hálft ár í viðbót verða lagfæringar fyrir það til að útrýma veikleikum.

Á sama tíma hófust alfaprófanir á Python 3.11 útibúinu (í samræmi við nýja þróunaráætlun hefst vinna við nýja útibú fimm mánuðum fyrir útgáfu fyrri útibús og nær alfaprófunarstigi við næstu útgáfu ). Python 3.11 útibúið verður í alfa útgáfu í sjö mánuði, þar sem nýjum eiginleikum verður bætt við og villur lagaðar. Eftir þetta verða beta útgáfur prófaðar í þrjá mánuði, á þeim tíma verður bannað að bæta við nýjum eiginleikum og allri athygli verður beint að því að laga villur. Síðustu tvo mánuði fyrir útgáfu mun útibúið vera á útgáfustigi, þar sem endanleg stöðugleiki fer fram.

Nýjar viðbætur við Python 3.10 innihalda:

  • Innleiddu "samsvörun" og "tilfelli" rekstraraðila fyrir mynstursamsvörun, sem bæta kóða læsileika, einfalda samsvörun handahófskenndra Python hluta og auka áreiðanleika kóða með háþróaðri kyrrstöðugerð eftirliti. Útfærslan er mjög lík "samsvörun" rekstraraðilanum sem gefin er upp í Scala, Rust og F#, sem ber saman niðurstöðu tiltekinnar tjáningar við lista yfir mynstur sem skráð eru í kubbum byggt á "case" rekstraraðilanum.

    def http_error(staða): match status: case 400: return “Bad request” case 401|403|404: return “Not allowed” case 418: return “I'm a teapot” case _: return “Eitthvað annað”

    Þú getur pakkað niður hlutum, túllum, listum og handahófskenndum röðum til að binda breytur byggðar á gildandi gildum. Það er leyfilegt að skilgreina hreiður sniðmát, nota viðbótar „ef“ skilyrði í sniðmátinu, nota grímur („[x, y, *rest]“), lykla-/gildavörp (til dæmis {“bandwidth”: b, „latency“ ”: l} til að draga „bandbreidd“ og „leynd“ gildi úr orðabók), draga út undirsniðmát (":=" rekstraraðila), notaðu nafngreinda fasta í sniðmáti. Í flokkum er hægt að sérsníða samsvörunarhegðun með því að nota „__match__()“ aðferðina.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Einhvers staðar annars staðar") case _: print("Ekki punktur") passa saman punktur: fall Point(x, y) ef x == y: print(f"Y=X at {x}") case Point(x,y): print(f"Ekki á ská") RAUTT, GRÆNT, BLÁR = 0, 1, 2 passa litur: case RED: print(“Ég sé rautt!”) case GREEN: print(“Grass is green”) case BLUE: print(“I'm feeling the blues :(“)

  • Það er nú hægt að nota sviga í með yfirlýsingunni til að skipta skilgreiningunni á safni samhengisstjóra yfir margar línur. Það er einnig heimilt að skilja eftir kommu á eftir síðasta samhengisstjóra í hópnum: með ( CtxManager1() sem dæmi1, CtxManager2() sem dæmi2, CtxManager3() sem dæmi3, ): ...
  • Bætt tilkynning um kóðastaðsetningu villna sem tengjast ólokuðum axlaböndum og gæsalappir í bókstafi strengja. Til dæmis, þegar það er ólokað svigrúm, í stað þess að tilkynna um setningafræðivillu í eftirfarandi smíði, undirstrikar bendilinn nú opnunarsviguna og gefur til kynna að það sé engin lokablokk. Skrá "example.py", lína 1 væntanleg = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' var aldrei lokað

    Bætt við fleiri sérhæfðum setningafræði villuskilaboðum: vantar ":" tákn fyrir kubb og í orðabókum, aðskilur ekki tuple með sviga, vantar kommu í listum, tilgreinir "reyna" blokk án "nema" og "loksins", með því að nota "= " í stað "= =" í samanburði, tilgreina *-tjáningar í f-strengjum. Að auki tryggir það að öll vandamála tjáningin sé auðkennd, ekki bara byrjunin, og skýrari upplýsingar um samhengi villna sem tengjast röngum inndrætti. >>> def foo(): ... if lel: ... x = 2 Skrá " ", lína 3 x = 2 ^ IndentationError: bjóst við inndreginni blokk eftir 'ef' setningu í línu 2

    Í villum sem stafa af innsláttarvillum í nöfnum eiginda og breytuheita í falli er tilmæli með réttu nafni birt. >>>collections.namedtoplo Rekja (síðasta símtal síðast): Skrá « ", lína 1, í AttributeError: einingin 'safn' hefur enga eiginleika 'namedtoplo'. Áttirðu við: namedtuple?

  • Fyrir villuleitartæki og prófílara eru rakningarviðburðir með nákvæmum línunúmerum framkvæmda kóðans.
  • Bætti við sys.flags.warn_default_encoding stillingunni til að birta viðvörun um hugsanlegar villur tengdar TextIOWrapper og open() vinnslu UTF-8 kóðaðar skrár án þess að tilgreina 'encoding=»utf-8″' valmöguleikann (ASCII kóðun er sjálfgefið notuð) . Nýja útgáfan veitir einnig möguleika á að tilgreina 'encoding="locale"' gildi til að stilla kóðun út frá núverandi staðsetningu.
  • Nýr stjórnandi hefur verið bætt við vélritunareininguna, sem býður upp á verkfæri til að tilgreina tegundaskýringar, sem gerir kleift að nota setningafræðina „X | Y" til að velja eina af gerðunum (X gerð eða Y gerð). def square(tala: int | flot) -> int | flot: skilatala ** 2 jafngildir áður studdu smíði: def square(tala: Union[int, flot]) -> Union[int, flot]: skilatala ** 2
  • The Concatenate operator og ParamSpec breytunni hefur verið bætt við innsláttareininguna, sem gerir þér kleift að senda viðbótarupplýsingar til að athuga kyrrstöðu tegundar þegar þú notar Callable. Vélritunareiningin bætir einnig við sérstökum gildum TypeGuard til að skýra tegundarverndaraðgerðir og TypeAlias ​​til að skilgreina tegundarsamnefni. StrCache: TypeAlias ​​​​= 'Cache[str]' # tegund samnefni
  • Zip() aðgerðin útfærir valfrjálsan „ströng“ fána, sem, þegar það er tilgreint, athugar hvort rökin sem verið er að endurtaka séu í sömu lengd. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(svið(3), ['gjald', 'fi', 'fo', 'fum'], strict=True)) Rekja (síðasta símtal sl. ): … ValueError: zip() rök 2 er lengri en rök 1
  • Nýjar innbyggðar aðgerðir aiter() og anext() eru lagðar til með útfærslu á ósamstilltum hliðstæðum föllunum iter() og next().
  • Vinnu str(), bytes() og bytearray() smiðanna þegar unnið er með litla hluti hefur verið flýtt um 30-40%.
  • Fækkaði innflutningsaðgerðum í runpy einingunni. Skipunin „python3 -m module_name“ keyrir nú að meðaltali 1.4 sinnum hraðar vegna fækkunar innfluttra eininga úr 69 í 51.
  • LOAD_ATTR leiðbeiningin notar skyndiminni fyrir einstaka opkóða, sem gerði það mögulegt að flýta vinnu með venjulegum eiginleikum um allt að 36% og með rifa um allt að 44%.
  • Þegar Python er byggt með „--enable-optimizations“ valmöguleikanum er „-fno-semantic-interposition“ stillingin nú virkjuð, sem gerir kleift að flýta túlknum um allt að 30% samanborið við að byggja með „--enable-shared ” valmöguleika.
  • Hashlib og ssl einingarnar hafa bætt við stuðningi við OpenSSL 3.0.0 og hætt að styðja OpenSSL útgáfur eldri en 1.1.1.
  • Gamli þáttarinn hefur verið fjarlægður, sem var skipt út fyrir í fyrri greininni með PEG (Parsing Expression Grammar) flokkaranum. Forsníðaeiningin hefur verið fjarlægð. Lykkjufæribreytan hefur verið fjarlægð úr asyncio API. Aðferðir sem áður voru úreltar hafa verið fjarlægðar. Py_UNICODE_str* aðgerðirnar sem vinna með Py_UNICODE* strengi hafa verið fjarlægðar.
  • Distutils einingin hefur verið úrelt og er áætlað að fjarlægja hana í Python 3.12. Í stað distutils er mælt með því að nota uppsetningarverkfærin, umbúðirnar, vettvang, shutil, undirferli og sysconfig einingar. Wstr uppbyggingin í PyUnicodeObject hefur verið úrelt og áætlað að fjarlægja hana.

Heimild: opennet.ru

Bæta við athugasemd