Release fan de Python 3.11 programmeartaal

Nei in jier fan ûntwikkeling is de wichtige frijlitting fan 'e programmeartaal Python 3.11 publisearre. De nije branch wurdt foar oardel jier stipe, wêrnei't noch trije en in heal jier der reparaasjes foar generearre wurde om kwetsberens op te heljen.

Tagelyk begon alpha-testen fan 'e Python 3.12-tûke (yn oerienstimming mei it nije ûntwikkelingskema begjint it wurk oan in nije tûke fiif moanne foar de frijlitting fan' e foarige tûke en berikt it alpha-teststadium op 'e tiid fan' e folgjende release ). De Python 3.12-tûke sil sân moannen yn alpha-release wêze, wêryn nije funksjes sille wurde tafoege en bugs repareare. Hjirnei sille beta-ferzjes trije moannen wurde hifke, wêryn it tafoegjen fan nije funksjes ferbean wurdt en alle oandacht sil wurde betelle oan it reparearjen fan bugs. Foar de lêste twa moannen foar de frijlitting sil de tûke yn 'e frijlittingskandidaatstadium wêze, wêryn definitive stabilisaasje sil wurde útfierd.

Nije tafoegings oan Python 3.11 omfetsje:

  • Wichtich wurk is dien om de prestaasjes te optimalisearjen. De nije tûke omfettet wizigingen yn ferbân mei fersnelling en ynline ynset fan funksjeoproppen, it brûken fan rappe tolken fan standert operaasjes (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), lykas ek optimisaasjes taret troch de Cinder- en HotPy-projekten. Ofhinklik fan it type lading is d'r in ferheging fan koade-útfiersnelheid fan 10-60%. Gemiddeld tanommen de prestaasjes op 'e pyperformance-testsuite mei 25%.

    It bytecode-cachingmeganisme is opnij ûntwurpen, wat de opstarttiid fan 'e tolk mei 10-15% fermindere hat. Objekten mei koade en bytekoade wurde no statysk tawiisd troch de tolk, wat it mooglik makke om de stadia fan unmarshalling bytecode te eliminearjen út 'e cache en it konvertearjen fan objekten mei koade om te pleatsen yn dynamysk ûnthâld.

  • By it werjaan fan opropspoaren yn diagnostyske berjochten is it no mooglik om ynformaasje te werjaan oer de útdrukking dy't de flater feroarsake hat (earder waard allinich de rigel markearre sûnder detaillearre hokker diel fan 'e rigel de flater feroarsake hat). Utwreide trace ynformaasje kin ek krigen wurde fia de API en brûkt foar in map yndividuele bytecode ynstruksjes oan in spesifike posysje yn de boarne koade mei help fan de codeobject.co_positions () metoade of de C API funksje PyCode_Addr2Location (). De wiziging makket it folle makliker om problemen te debuggen mei nêste wurdboekobjekten, meardere funksjeoproppen en komplekse rekenkundige útdrukkingen. Traceback (meast resinte oprop lêste): Triem "calculation.py", rigel 54, yn resultaat = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divyzje troch nul
  • Stipe tafoege foar útsûnderingsgroepen, wêrtroch it programma de mooglikheid hat om ferskate ferskillende útsûnderings tagelyk te generearjen en te ferwurkjen. Om meardere útsûnderings te groepearjen en se byinoar te ferheegjen, binne nije útsûnderingstypen ExceptionGroup en BaseExceptionGroup foarsteld, en de "útsein *"-ekspresje is tafoege om yndividuele útsûnderings fan in groep te markearjen.
  • De metoade add_note () is tafoege oan de BaseException-klasse, wêrtroch jo in tekstnotysje oan 'e útsûndering kinne heakje, bygelyks kontekstuele ynformaasje tafoegje dy't net beskikber is as de útsûndering wurdt smiten.
  • In spesjaal selstype tafoege om de hjoeddeistige priveeklasse te fertsjintwurdigjen. Sels kin brûkt wurde om metoaden te annotearjen dy't in eksimplaar fan syn klasse op in ienfâldiger manier weromjaan dan it brûken fan TypeVar. klasse MyLock: def __enter__ (sels) -> Self: self.lock () werom sels
  • In spesjale LiteralString-type tafoege dat allinich string-literalen kin befetsje dy't kompatibel binne mei it LiteralString-type (dat wol sizze, bleate en LiteralString-strings, mar net willekeurige of kombineare strings). It LiteralString-type kin brûkt wurde om it trochjaan fan tekenrige arguminten te beheinen ta funksjes, willekeurige ferfanging fan dielen fan snaren wêryn kin liede ta kwetsberens, bygelyks by it generearjen fan snaren foar SQL-fragen of shell-kommando's. def run_query(sql: LiteralString) -> ... ... def caller(arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Gjin: run_query("SELECT * FROM studinten") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Flater run_query( # Flater f"SELECT * FROM studinten WHERE namme = {arbitrary_string}")
  • It TypeVarTuple-type is tafoege, wêrtroch it gebrûk fan fariabele generika mooglik is, yn tsjinstelling ta TypeVar, dy't net ien type dekke, mar in willekeurige oantal soarten.
  • De standertbibleteek omfettet de tomllib-module mei funksjes foar it parsearjen fan it TOML-formaat.
  • It is mooglik om yndividuele eleminten fan typte wurdboeken (TypedDict) te markearjen mei Required en NotRequired labels om fereaske en opsjonele fjilden te bepalen (standert binne alle ferklearre fjilden fereaske as de totale parameter net op False ynsteld is). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (it jierfjild is opsjoneel) m3: Film = {"jier": 2022} # Flater, it fereaske titelfjild is net ynfolle)
  • De TaskGroup-klasse is tafoege oan de asyncio-module mei de ymplemintaasje fan in asynchrone kontekstbehearder dy't wachtet op in groep taken om te foltôgjen. Taken tafoegje oan in groep wurdt dien mei de metoade create_task (). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Beide taken binne no foltôge .")
  • Added @dataclass_transform decorator foar klassen, metoaden en funksjes, as oantsjutte, it statyske type kontrôle systeem behannelet it foarwerp as brûkt de @dataclasses.dataclass decorator. Yn it foarbyld hjirûnder sil de CustomerModel-klasse, by it kontrolearjen fan typen, fergelykber wurde mei in klasse mei de @dataclasses.dataclass-dekorator, d.w.s. as it hawwen fan in __init__ metoade dy't akseptearret id en namme fariabelen. @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • Yn reguliere útdrukkingen is de mooglikheid om atomêre groepearring ((?>...)) en besitlike kwantifisearrings (*+, ++, ?+, {m,n}+) te brûken tafoege.
  • Tafoege "-P" kommandorigelopsje en PYTHONSAFEPATH omjouwingsfariabele om automatyske taheaksel fan potensjeel ûnfeilige triempaden nei sys.path út te skeakeljen.
  • It py.exe-hulpprogramma foar it Windows-platfoarm is signifikant ferbettere, it tafoegjen fan stipe foar de "-V:"-syntaksis. / " dêrnjonken "- . "
  • In protte makro's yn 'e C API wurde omboud ta reguliere of statyske ynline funksjes.
  • De modules uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, en sunau binne ôfkard en sille fuortsmiten wurde yn de Python 3.13 release. Fuortsmite PyUnicode_Encode * funksjes.

Boarne: opennet.ru

Add a comment