Kutulutsidwa kwa chilankhulo cha pulogalamu ya Python 3.11

Pambuyo pa chaka cha chitukuko, kutulutsidwa kwakukulu kwa chilankhulo cha pulogalamu ya Python 3.11 kwasindikizidwa. Nthambi yatsopanoyi idzathandizidwa kwa chaka chimodzi ndi theka, pambuyo pake kwa zaka zina zitatu ndi theka, zokonzekera zidzapangidwa kuti zithetse zovuta.

Nthawi yomweyo, kuyesa kwa alpha kwa nthambi ya Python 3.12 kudayamba (molingana ndi ndandanda yatsopano yachitukuko, ntchito panthambi yatsopano imayamba miyezi isanu isanatulutse nthambi yapitayi ndikufikira gawo loyesa alpha pofika nthawi yotulutsidwa kotsatira. ). Nthambi ya Python 3.12 idzakhala ikutulutsidwa kwa alpha kwa miyezi isanu ndi iwiri, pomwe zatsopano zidzawonjezedwa ndikukhazikika. Pambuyo pake, mitundu ya beta idzayesedwa kwa miyezi itatu, pomwe kuwonjezera zatsopano kudzaletsedwa ndipo chidwi chonse chidzaperekedwa pakukonza zolakwika. Kwa miyezi iwiri yapitayi kuti amasulidwe, nthambiyi idzakhala itatsala pang’ono kumasulidwa, ndipo padzakhala kukhazikika komaliza.

Zowonjezera zatsopano ku Python 3.11 zikuphatikiza:

  • Ntchito yaikulu yachitidwa pofuna kukhathamiritsa bwino ntchito. Nthambi yatsopanoyi imaphatikizapo kusintha kokhudzana ndi kuthamangitsidwa ndi kutumizidwa kwapaintaneti kwa mafoni ogwira ntchito, kugwiritsa ntchito omasulira mofulumira a ntchito zokhazikika (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), komanso kukhathamiritsa kokonzedwa ndi ntchito za Cinder ndi HotPy. Kutengera mtundu wa katundu, pali kuwonjezeka kwa code kupha liwiro la 10-60%. Pa avareji, magwiridwe antchito pamayeso a pyperformance adakwera ndi 25%.

    Makina osungira a bytecode adakonzedwanso, zomwe zachepetsa nthawi yoyambira yomasulira ndi 10-15%. Zinthu zomwe zili ndi code ndi bytecode tsopano zimaperekedwa mokhazikika ndi womasulira, zomwe zinapangitsa kuti zitheke kuthetsa magawo a unmarshalling bytecode ochotsedwa mu cache ndi kutembenuza zinthu ndi code kuti aikidwe mu kukumbukira kwamphamvu.

  • Mukawonetsa zotsatizana zamayimbidwe mumauthenga ozindikira, tsopano ndizotheka kuwonetsa zambiri zamawu omwe adayambitsa cholakwika (m'mbuyomu, mzere wokhawo udawunikidwa popanda kufotokoza kuti ndi gawo liti la mzere lomwe layambitsa cholakwikacho). Zambiri zotsatiridwa zitha kupezekanso kudzera mu API ndikugwiritsanso ntchito kuyika malangizo a bytecode pagawo linalake la gwero pogwiritsa ntchito njira ya codeobject.co_positions() kapena C API ntchito PyCode_Addr2Location(). Kusinthaku kumapangitsa kuti kukhale kosavuta kuthetsa mavuto ndi zinthu za mtanthauzira mawu, kuyimba kambirimbiri, ndi mawu ovuta a masamu. Traceback (kuyimba kwaposachedwa kwambiri): Fayilo "calculation.py", mzere 54, zotsatira = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by ziro
  • Thandizo lowonjezera kwa magulu apadera, kupatsa pulogalamuyo kuthekera kopanga ndikukonza zosiyana zingapo nthawi imodzi. Kuti muphatikize zosiyana zingapo ndikuzikweza palimodzi, mitundu yatsopano ya ExceptionGroup ndi BaseExceptionGroup yaperekedwa, ndipo mawu oti "kupatula*" awonjezedwa kuti awonetsere kupatula pagulu.
  • Njira ya add_note () yawonjezedwa ku kalasi ya BaseException, kukulolani kuti muphatikizepo cholembera chosiyana, mwachitsanzo, kuwonjezera chidziwitso chomwe sichipezeka pamene chosiyana chikuponyedwa.
  • Anawonjezera mtundu wapadera wa Self kuyimira kalasi yachinsinsi yomwe ilipo. Self itha kugwiritsidwa ntchito kulongosola njira zomwe zimabwezera chitsanzo cha kalasi yake m'njira yosavuta kuposa kugwiritsa ntchito TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() bwererani nokha
  • Onjezani mtundu wapadera wa LiteralString womwe ungaphatikizepo zingwe zenizeni zomwe zimagwirizana ndi mtundu wa LiteralString (i.e., bare ndi LiteralString zingwe, koma osati zingwe zongotsamira kapena zophatikizika). Mtundu wa LiteralString ungagwiritsidwe ntchito kuchepetsa kupititsa kwa mikangano ya zingwe ku ntchito, kulowetsa m'malo mwa zingwe zomwe zingayambitse chiwopsezo, mwachitsanzo, popanga zingwe za mafunso a SQL kapena malamulo a zipolopolo. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Palibe: run_query("SAKHANI * KWA ophunzira") # ok run_query(literal_string) # ok run_query( "SAKHANI * KUCHOKERA" + literal_string) # ok run_query(arbitrary_string) # Error run_query( # Error f"SKHANI * KUCHOKERA KWA ophunzira KULI dzina = {arbitrary_string}")
  • Mtundu wa TypeVarTuple wawonjezedwa, kulola kugwiritsa ntchito ma generic osinthika, mosiyana ndi TypeVar, omwe samaphimba mtundu umodzi, koma kuchuluka kwamitundu yosiyanasiyana.
  • Laibulale yokhazikika imaphatikizapo gawo la tomllib lomwe lili ndi ntchito zowunikira mawonekedwe a TOML.
  • Ndi zotheka kuyika chizindikiro cha madikishonale otayidwa (TypedDict) okhala ndi zilembo Zofunikira ndi Zosafunikira kuti mudziwe madera ofunikira komanso osasankha (mwachisawawa, magawo onse olengezedwa amafunikira ngati gawo lonse silinakhazikitsidwe kukhala Zonama). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # CHABWINO (gawo la chaka ndi losankha) m3: Kanema = {β€œchaka”: 2022} # Cholakwika, gawo lofunikira silinadzazidwe)
  • Kalasi ya TaskGroup yawonjezedwa ku gawo la asyncio ndikukhazikitsa woyang'anira ma asynchronous omwe amadikirira kuti gulu la ntchito limalize. Kuonjezera ntchito pagulu kumachitika pogwiritsa ntchito njira ya create_task(). async def main(): async ndi asyncio.TaskGroup() monga tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) kusindikiza("Ntchito zonse ziwiri zatha tsopano .")
  • Added @dataclass_transform decorator ya makalasi, njira ndi ntchito, pamene zatchulidwa, static type checking system imagwiritsa ntchito chinthu ngati chokongoletsera @dataclasses.dataclass. Muchitsanzo chomwe chili pansipa, kalasi ya CustomerModel, poyang'ana mitundu, idzasinthidwa mofanana ndi kalasi ndi @dataclasses.dataclass decorator, i.e. monga kukhala ndi __init__ njira yomwe imavomereza id ndi mayina osiyanasiyana. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • M'mawu anthawi zonse, kuthekera kogwiritsa ntchito magulu a atomiki ((?>...)) ndi zochuna zinthu (+, ++, ?+, {m,n}+) zawonjezedwa.
  • Chowonjezera "-P" mzere wamalamulo ndi PYTHONSAFEPATH kusintha kwa chilengedwe kuti mulepheretse kumangirizidwa kwa mafayilo omwe angakhale opanda chitetezo ku sys.path.
  • Ntchito ya py.exe papulatifomu ya Windows yasinthidwa kwambiri, ndikuwonjezera chithandizo cha mawu akuti "-V:". / " kuphatikiza pa "- . "
  • Ma macros ambiri mu C API amasinthidwa kukhala ntchito zanthawi zonse kapena zokhazikika.
  • The uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, ndi sunau modules zachotsedwa ndipo zidzachotsedwa mu Python. 3.13 kumasulidwa. Zachotsedwa ntchito za PyUnicode_Encode*.

Source: opennet.ru

Kuwonjezera ndemanga