Vrystelling van die Python 3.11-programmeertaal

Na 'n jaar van ontwikkeling is die beduidende vrystelling van die Python 3.11-programmeertaal gepubliseer. Die nuwe tak sal vir een en 'n half jaar ondersteun word, waarna nog drie en 'n half jaar ontwikkel sal word om kwesbaarhede reg te stel.

Terselfdertyd het alfa-toetsing van die Python 3.12-tak begin (in ooreenstemming met die nuwe ontwikkelingskedule, werk aan 'n nuwe tak begin vyf maande voor die vrystelling van die vorige tak en bereik die alfa-toetsstadium teen die tyd van die volgende vrystelling ). Die Python 3.12-tak sal vir sewe maande in alfa-vrystelling wees, waartydens nuwe funksies bygevoeg en foute reggestel sal word. Hierna sal beta-weergawes vir drie maande getoets word, waartydens die toevoeging van nuwe kenmerke verbied sal word en alle aandag sal gegee word aan die regstelling van foute. Vir die laaste twee maande voor die vrystelling sal die tak in die vrystellingskandidaatstadium wees, waarop finale stabilisering uitgevoer sal word.

Nuwe toevoegings tot Python 3.11 sluit in:

  • Beduidende werk is gedoen om prestasie te optimaliseer. Die nuwe tak sluit veranderinge in wat verband hou met versnelling en inlyn-ontplooiing van funksie-oproepe, die gebruik van vinnige tolke van standaardbewerkings (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), sowel as optimaliserings wat deur die Cinder- en HotPy-projekte voorberei is. Afhangende van die tipe vrag, is daar 'n toename in kode-uitvoeringspoed van 10-60%. Gemiddeld het prestasie op die pyperformance-toetsreeks met 25% toegeneem.

    Die greepkode-kasmeganisme is herontwerp, wat die opstarttyd van die tolk met 10-15% verminder het. Voorwerpe met kode en greepkode word nou staties deur die tolk toegewys, wat dit moontlik gemaak het om die stadiums van die unmarshalling van greepkode wat uit die kas onttrek is, uit te skakel en om voorwerpe met kode om te skakel om in dinamiese geheue geplaas te word.

  • Wanneer oproepspore in diagnostiese boodskappe vertoon word, is dit nou moontlik om inligting te vertoon oor die uitdrukking wat die fout veroorsaak het (voorheen is slegs die lyn uitgelig sonder om te verduidelik watter deel van die lyn die fout veroorsaak het). Uitgebreide spoorinligting kan ook deur die API verkry word en gebruik word om individuele greepkode-instruksies na 'n spesifieke posisie in die bronkode te karteer deur die codeobject.co_positions()-metode of die C API-funksie PyCode_Addr2Location() te gebruik. Die verandering maak dit baie makliker om probleme met geneste woordeboekvoorwerpe, veelvuldige funksie-oproepe en komplekse rekenkundige uitdrukkings te ontfout. Traceback (mees onlangse oproep laaste): Lêer "calculation.py", reël 54, in resultaat = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: deling deur nul
  • Bygevoeg ondersteuning vir uitsonderingsgroepe, wat die program die vermoë gee om verskeie verskillende uitsonderings tegelyk te genereer en te verwerk. Om veelvuldige uitsonderings te groepeer en saam te bring, is nuwe uitsonderingstipes ExceptionGroup en BaseExceptionGroup voorgestel, en die "except*"-uitdrukking is bygevoeg om individuele uitsonderings van 'n groep uit te lig.
  • Die add_note()-metode is by die BaseException-klas gevoeg, wat jou toelaat om 'n teksnota aan die uitsondering te heg, byvoorbeeld om kontekstuele inligting by te voeg wat nie beskikbaar is wanneer die uitsondering gegooi word nie.
  • Het 'n spesiale selftipe bygevoeg om die huidige privaat klas voor te stel. Self kan gebruik word om metodes te annoteer wat 'n instansie van sy klas op 'n eenvoudiger manier terugstuur as om TypeVar te gebruik. klas MyLock: def __enter__(self) -> Self: self.lock() gee self terug
  • Het 'n spesiale LiteralString-tipe bygevoeg wat slegs string-literals kan insluit wat versoenbaar is met die LiteralString-tipe (d.w.s. kaal- en LiteralString-stringe, maar nie arbitrêre of gekombineerde string stringe nie). Die LiteralString-tipe kan gebruik word om die oordrag van string-argumente na funksies te beperk, arbitrêre vervanging van dele van stringe wat kan lei tot kwesbaarhede, byvoorbeeld wanneer stringe vir SQL-navrae of dopopdragte gegenereer word. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, tabelnaam: LiteralString, ) -> Geen: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Error run_query( # Error f"SELECT * FROM students WHERE name = {arbitrary_string}" )
  • Die TypeVarTuple-tipe is bygevoeg, wat die gebruik van veranderlike generieke moontlik maak, anders as TypeVar, wat nie een tipe dek nie, maar 'n arbitrêre aantal tipes.
  • Die standaardbiblioteek bevat die tomllib-module met funksies vir die ontleding van die TOML-formaat.
  • Dit is moontlik om individuele elemente van getikte woordeboeke (TypedDict) met Required- en NotRequired-etikette te merk om vereiste en opsionele velde te bepaal (by verstek word alle verklaarde velde vereis as die totale parameter nie op False gestel is nie). klas Movie(TypedDict): title: str jaar: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (die jaarveld is opsioneel) m3: Movie = {“year”: 2022} # Fout, die vereiste titelveld is nie ingevul nie)
  • Die TaskGroup-klas is by die asyncio-module gevoeg met die implementering van 'n asynchrone konteksbestuurder wat wag vir 'n groep take om te voltooi. Die byvoeging van take by 'n groep word gedoen met behulp van die create_task() metode. async def main(): async met asyncio.TaskGroup() as tg: taak1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Albei take is nou voltooi .")
  • Bygevoeg @dataclass_transform versierder vir klasse, metodes en funksies, wanneer gespesifiseer, behandel die statiese tipe kontroleringstelsel die voorwerp asof dit die @dataclasses.dataclass versierder gebruik. In die voorbeeld hieronder sal die CustomerModel-klas, wanneer tipes gekontroleer word, soortgelyk aan 'n klas met die @dataclasses.dataclass-versierder verwerk word, d.w.s. as 'n __init__ metode wat id en naam veranderlikes aanvaar. @dataclass_transform() klas ModelBase: ... klas CustomerModel(ModelBase): id: int naam: str
  • In gereelde uitdrukkings is die vermoë om atoomgroepering ((?>...)) en besitlike kwantifiseerders (*+, ++, ?+, {m,n}+) te gebruik bygevoeg.
  • Bygevoeg "-P" command line opsie en PYTHONSAFEPATH omgewing veranderlike om outomatiese aanhegting van potensieel onveilige lêer paaie te deaktiveer sys.path.
  • Die py.exe-nutsding vir die Windows-platform is aansienlik verbeter, wat ondersteuning vir die "-V:"-sintaksis bygevoeg het. / " bykomend tot "- . "
  • Baie makro's in die C API word omgeskakel na gereelde of statiese inlyn funksies.
  • Die uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev en sunau-modules is afgekeur en sal in die Python verwyder word 3.13 vrystelling. Verwyder PyUnicode_Encode* funksies.

Bron: opennet.ru

Voeg 'n opmerking