Ukukhishwa kolimi lokuhlela lwePython 3.11

Ngemuva konyaka wokuthuthuka, kushicilelwe ukukhishwa okubalulekile kolimi lohlelo lwePython 3.11. Igatsha elisha lizosekelwa unyaka nengxenye, okuyothi ngemva kwalokho kweminye iminyaka emithathu nengxenye, kulungiswe ukuze kuqedwe ubuthakathaka.

Ngaso leso sikhathi, ukuhlolwa kwe-alpha kwegatsha le-Python 3.12 kwaqala (ngokuhambisana nohlelo olusha lokuthuthukiswa, umsebenzi egatsheni elisha uqala izinyanga ezinhlanu ngaphambi kokukhishwa kwegatsha langaphambilini futhi ufinyelela esigabeni sokuhlola i-alpha ngesikhathi sokukhishwa okulandelayo. ). Igatsha le-Python 3.12 lizobe liku-alpha izinyanga eziyisikhombisa, lapho izici ezintsha zizongezwa futhi kulungiswe iziphazamisi. Ngemuva kwalokhu, izinguqulo ze-beta zizohlolwa izinyanga ezintathu, lapho ukungeza izici ezintsha kuzovinjelwa futhi konke ukunaka kuzokhokhwa ekulungiseni iziphazamisi. Ezinyangeni ezimbili zokugcina ngaphambi kokukhululwa, igatsha liyobe lisesimweni sokukhululwa, lapho kuzokwenziwa khona ukuzinza kokugcina.

Izengezo ezintsha kuPython 3.11 zifaka:

  • Umsebenzi omkhulu wenziwe ukuze kuthuthukiswe ukusebenza kahle. Igatsha elisha lihlanganisa izinguquko ezihlobene nokusheshisa kanye nokuphakwa okusemgqeni kwezingcingo zokusebenza, ukusetshenziswa kwabatolika abasheshayo bemisebenzi evamile (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), kanye nokulungiselelwa okulungiselelwe iphrojekthi ye-Cinder ne-HotPy. Kuye ngohlobo lomthwalo, kukhona ukwanda kwejubane lokukhishwa kwekhodi lika-10-60%. Ngokwesilinganiso, ukusebenza kuhlelo lokuhlola i-pyperformance kukhuphuke ngo-25%.

    I-bytecode caching mechanism yenziwe kabusha, okunciphise isikhathi sokuqalisa sotolika ngo-10-15%. Izinto ezinekhodi kanye ne-bytecode manje zinikezwa umhumushi ngokwezibalo, okwenze kwaba nokwenzeka ukuqeda izigaba ze-bytecode yokungamashali ekhishwe kunqolobane nokuguqula izinto ezinekhodi ezizofakwa kumemori eguquguqukayo.

  • Uma ubonisa ukulandelelwa kwekholi emilayezweni yokuxilonga, manje sekungenzeka ukuthi kuboniswe ulwazi mayelana nenkulumo ebangele iphutha (ngaphambilini, umugqa kuphela owawugqanyisiwe ngaphandle kokuchaza ukuthi iyiphi ingxenye yomugqa ebangele iphutha). Ulwazi olunwetshiwe lokulandelela lungaphinda lutholakale nge-API futhi lusetshenziselwe ukwenza imephu ye-bytecode imiyalelo endaweni ethile kukhodi yomthombo kusetshenziswa indlela ye-codeobject.co_positions() noma umsebenzi we-C API PyCode_Addr2Location(). Ushintsho lwenza kube lula kakhulu ukulungisa izinkinga ngezinto zesichazamazwi esidleke, izingcingo zemisebenzi eminingi, nezinkulumo ze-arithmetic eziyinkimbinkimbi. I-Traceback (ucingo lwakamuva lugcine): Ifayela elithi "calculation.py", umugqa 54, umphumela = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • Kwengezwe usekelo lwamaqembu ahlukile, okunikeza uhlelo ikhono lokukhiqiza nokucubungula okuhlukile okuningana ngesikhathi esisodwa. Ukuze uqoqe okuhlukile okuningi futhi sikukhulise ndawonye, ​​kuphakanyiswe izinhlobo ezintsha ezihlukile i-ExceptionGroup ne-BaseExceptionGroup, futhi isisho esithi “ngaphandle*” sengeziwe ukuze kugqanyiswe okuhlukile komuntu ngamunye eqenjini.
  • Indlela ye-add_note() yengezwe ekilasini le-BaseException, okukuvumela ukuthi unamathisele inothi lombhalo kokuhlukile, isibonelo, ukwengeza ulwazi lwengqikithi olungatholakali uma okuhlukile kuphonswa.
  • Kwengezwe uhlobo lwe-Self olukhethekile ukumela isigaba samanje sangasese. Uqobo lwakho lungasetshenziselwa ukuchaza izindlela ezibuyisela isibonelo sekilasi laso ngendlela elula kunokusebenzisa i-TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() zibuyise
  • Kwengezwe uhlobo olukhethekile lwe-LiteralString olungafaka kuphela iyunithi yezinhlamvu ehambisana nohlobo lwe-LiteralString (okungukuthi, iyunithi yezinhlamvu engenalutho kanye ne-LiteralString, kodwa hhayi iyunithi yezinhlamvu engafanele noma ehlanganisiwe). Uhlobo lwe-LiteralString lungasetshenziswa ukukhawulela ukudluliswa kwama-agumenti eyunithi yezinhlamvu emisebenzini, ukushintshwa ngokungafanele kwezingxenye zeyunithi yezinhlamvu okungaholela ekubeni sengozini, isibonelo, lapho kukhiqizwa amayunithi ezinhlamvu emibuzo ye-SQL noma imiyalo yegobolondo. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("KHETHA * KUSUKA kubafundi") # kulungile run_query(literal_string) # ok run_query( "KHETHA * KUSUKA" + literal_string) # ok run_query(arbitrary_string) # Iphutha run_query( # Iphutha f"KHETHA * KUSUKA kubafundi LAPHO igama = {arbitrary_string}")
  • Uhlobo lwe-TypeVarTuple lwengeziwe, okuvumela ukusetshenziswa kwamajenerikhi aguquguqukayo, ngokungafani ne-TypeVar, engafaki uhlobo olulodwa, kodwa inombolo engafanele yezinhlobo.
  • Umtapo wolwazi ojwayelekile uhlanganisa imojuli ye-tomllib enemisebenzi yokuhlaziya ifomethi ye-TOML.
  • Kungenzeka ukumaka izici ngazinye zesichazamazwi esithayiphiwe (TypedDict) ngamalebula Adingekayo kanye Nengadingekile ukuze unqume izinkambu ezidingekayo nezingakhethwa (ngokuzenzakalelayo, zonke izinkambu ezishiwo ziyadingeka uma ipharamitha ephelele ingasethwanga kokuthi Amanga). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # Kulungile m2: Movie = {"title": "Star Wars" } # KULUNGILE (inkambu yonyaka uyazikhethela) m3: Ifilimu = {“unyaka”: 2022} # Iphutha, inkambu yesihloko edingekayo ayigcwaliswanga)
  • Isigaba se-TaskGroup sengezwe kumojula ye-asyncio ngokusetshenziswa komphathi womongo ongavumelanisi olinda iqembu lemisebenzi ukuthi liqede. Ukwengeza imisebenzi eqenjini kwenziwa kusetshenziswa indlela yokudala_umsebenzi (). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(other_coro(...)) phrinta("Yomibili imisebenzi isiqedile manje .")
  • Kwengezwe i-@dataclass_transform decorator yamakilasi, izindlela nemisebenzi, uma icacisiwe, isistimu yokuhlola uhlobo olungashintshi iphatha into njengokungathi isebenzisa umhlobisi othi @dataclasses.dataclass. Esibonelweni esingezansi, ikilasi leCustomerModel, lapho kuhlolwa izinhlobo, lizocutshungulwa ngendlela efanayo nekilasi elinomhlobiso [email protected], i.e. njengokuba nendlela __init__ eyamukela i-id kanye neziguquguqukayo zamagama. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Ezimweni ezivamile, ikhono lokusebenzisa iqembu le-athomu ((?>...)) kanye nezilinganiso zobunikazi (+, ++, ?+, {m,n}+) lengeziwe.
  • Kwengezwe inketho yomugqa womyalo "-P" kanye nokuhlukahluka kwemvelo kwe-PYTHONSAFEPATH ukuze ukhubaze okunamathiselwe okuzenzakalelayo kwemizila yefayela okungenzeka ingaphephile ku-sys.path.
  • Insiza ye-py.exe yesikhulumi se-Windows ithuthukiswe kakhulu, yengeza ukusekelwa kwe-syntax ethi "-V:". / " Ngaphezu kwe "- . "
  • Amamakhro amaningi ku-C API aguqulwa abe imisebenzi ejwayelekile noma emile emgqeni.
  • I-uu, cgi, amapayipi, i-crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, namamojula we-sunau ahoxisiwe futhi azosuswa ku-Python 3.13 ukukhululwa. Kukhishwe imisebenzi ye-PyUnicode_Encode*.

Source: opennet.ru

Engeza amazwana