Liberasyon langaj pwogramasyon Python 3.11

Apre yon ane nan devlopman, yo te pibliye lage enpòtan nan lang pwogramasyon Python 3.11. Nouvo branch lan pral sipòte pou yon ane edmi, apre sa pou yon lòt twa ane edmi, yo pral pwodwi ranje pou li elimine frajilite yo.

An menm tan an, tès alfa nan branch Python 3.12 la te kòmanse (an akò ak nouvo orè devlopman an, travay sou yon nouvo branch kòmanse senk mwa anvan liberasyon branch anvan an epi li rive nan etap tès alfa a nan moman pwochen lage a. ). Branch Python 3.12 la pral nan lage alfa pandan sèt mwa, pandan y ap ajoute nouvo karakteristik ak ensèk yo fikse. Apre sa, vèsyon beta yo pral teste pandan twa mwa, pandan sa yo pral entèdi ajoute nouvo karakteristik epi yo pral peye tout atansyon a repare pinèz. Pou de mwa ki sot pase yo anvan liberasyon an, branch lan pral nan etap kandida lage, nan ki estabilizasyon final la pral fèt.

Nouvo ajoute nan Python 3.11 enkli:

  • Travay enpòtan yo te fè pou optimize pèfòmans. Nouvo branch lan gen ladann chanjman ki gen rapò ak akselerasyon ak deplwaman an liy nan apèl fonksyon, itilizasyon entèprèt rapid nan operasyon estanda (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), osi byen ke optimize pwojè Cinder ak HotPy prepare. Tou depan de kalite chaj la, gen yon ogmantasyon nan vitès ekzekisyon kòd nan 10-60%. An mwayèn, pèfòmans sou pyperformance tès suite a te ogmante pa 25%.

    Mekanis kachèt bytecode la te reamenaje, ki te redwi tan demaraj entèprèt la pa 10-15%. Objè ki gen kòd ak bytecode kounye a se statique atribye pa entèprèt la, ki te fè li posib elimine etap yo nan demarshalling bytecode ekstrè nan kachèt la ak konvèti objè ki gen kòd yo dwe mete nan memwa dinamik.

  • Lè w ap montre tras apèl nan mesaj dyagnostik yo, kounye a li posib pou montre enfòmasyon sou ekspresyon ki te lakòz erè a (anvan, se sèlman liy lan make san yo pa detaye ki pati nan liy lan ki te lakòz erè a). Ou ka jwenn enfòmasyon sou tras pwolonje tou atravè API a epi yo ka itilize pou kat enstriksyon bytecode endividyèl yo nan yon pozisyon espesifik nan kòd sous la lè l sèvi avèk metòd codeobject.co_positions() oswa fonksyon C API PyCode_Addr2Location(). Chanjman an rann li pi fasil pou debogaj pwoblèm ak objè diksyonè ki nich, plizyè apèl fonksyon, ak ekspresyon aritmetik konplèks. Traceback (pi resan apèl dènye): Fichye "calculation.py", liy 54, nan rezilta = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divizyon pa zewo
  • Te ajoute sipò pou gwoup eksepsyon yo, bay pwogram nan kapasite pou jenere ak trete plizyè eksepsyon diferan alafwa. Pou gwoup eksepsyon miltip ak ogmante yo ansanm, nouvo kalite eksepsyon ExceptionGroup ak BaseExceptionGroup yo te pwopoze, epi ekspresyon "eksepte *" yo te ajoute pou mete aksan sou eksepsyon endividyèl nan yon gwoup.
  • Metòd add_note() te ajoute nan klas BaseException, ki pèmèt ou tache yon nòt tèks nan eksepsyon an, pou egzanp, ajoute enfòmasyon kontèks ki pa disponib lè eksepsyon an voye.
  • Te ajoute yon kalite pwòp tèt ou espesyal pou reprezante klas prive aktyèl la. Yo ka itilize pwòp tèt ou pou anote metòd ki retounen yon egzanp nan klas li a nan yon fason ki pi senp pase lè l sèvi avèk TypeVar. klas MyLock: def __enter__(self) -> Self: self.lock() return self
  • Te ajoute yon kalite LiteralString espesyal ki ka sèlman gen ladan literèl fisèl ki konpatib ak kalite LiteralString (sa vle di, fisèl bare ak LiteralString, men pa fisèl abitrè oswa konbine). Kalite LiteralString ka itilize pou limite pase agiman fisèl nan fonksyon, sibstitisyon abitrè nan pati fisèl nan ki ka mennen nan vilnerabilite, pou egzanp, lè jenere fisèl pou demann SQL oswa kòmandman koki. def run_query(sql: LiteralString) -> ... ... def moun kap rele( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Okenn: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Erè run_query( # Erè f"SELECT * FROM Students WHERE name = {arbitrary_string}" )
  • Yo te ajoute kalite TypeVarTuple, ki pèmèt itilize jenerik varyab, kontrèman ak TypeVar, ki kouvri pa yon sèl kalite, men yon kantite abitrè nan kalite.
  • Bibliyotèk estanda a gen ladan modil tomllib ak fonksyon pou analize fòma TOML la.
  • Li posib pou make eleman endividyèl nan diksyonè tape (TypedDict) ak etikèt Obligatwa ak NotRequired pou detèmine jaden obligatwa ak opsyonèl (pa default, tout jaden yo deklare yo obligatwa si paramèt total la pa mete nan Fo). klas Movie(TypedDict): title: str ane: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (champ ane a opsyonèl) m3: Fim = {“ane”: 2022} # Erè, jaden tit obligatwa a pa ranpli)
  • Yo te ajoute klas TaskGroup nan modil asyncio a ak aplikasyon yon manadjè kontèks asynchrone ki tann pou yon gwoup travay fini. Ajoute travay nan yon gwoup fè lè l sèvi avèk metòd create_task(). async def main(): async ak asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro (...)) task2 = tg.create_task(another_coro (...)) print("Tou de travay yo fini kounye a .")
  • Te ajoute @dataclass_transform dekoratè pou klas, metòd ak fonksyon, lè yo espesifye, sistèm nan tcheke kalite estatik trete objè a kòm si yo te itilize dekoratè a @dataclasses.dataclass. Nan egzanp ki anba a, klas CustomerModel la, lè w tcheke kalite yo, yo pral trete menm jan ak yon klas ak dekoratè @dataclasses.dataclass, i.e. kòm gen yon metòd __init__ ki aksepte id ak non varyab. @dataclass_transform() klas ModelBase: … klas CustomerModel(ModelBase): id: int non: str
  • Nan ekspresyon regilye, yo te ajoute kapasite pou itilize gwoupman atomik ((?>...)) ak quantifier posesif (*+, ++, ?+, {m,n}+).
  • Te ajoute opsyon liy kòmand "-P" ak varyab anviwònman PYTHONSAFEPATH pou enfim atachman otomatik nan chemen fichye ki kapab danjere nan sys.path.
  • Sèvis piblik py.exe pou platfòm Windows la te amelyore anpil, e li te ajoute sipò pou sentaks "-V:". / "anplis de"- . "
  • Anpil makro nan C API yo konvèti nan fonksyon regilye oswa estatik enline.
  • Modil uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, ak sunau yo te demode epi yo pral retire nan Python. 3.13 lage. Retire fonksyon PyUnicode_Encode*.

Sous: opennet.ru

Add nouvo kòmantè