Kutolewa kwa lugha ya programu ya Python 3.11

Baada ya mwaka wa maendeleo, toleo kubwa la lugha ya programu ya Python 3.11 imechapishwa. Tawi jipya litasaidiwa kwa mwaka mmoja na nusu, baada ya hapo viraka vyenye udhaifu vitaundwa kwa ajili yake kwa miaka mingine mitatu na nusu.

Wakati huo huo, majaribio ya alpha ya tawi la Python 3.12 ilianza (kulingana na ratiba mpya ya maendeleo, kazi kwenye tawi jipya huanza miezi mitano kabla ya kutolewa kwa tawi la awali na kufikia hatua ya majaribio ya alpha kufikia wakati wa toleo linalofuata. ) Tawi la Python 3.12 litakuwa katika matoleo ya alpha kwa miezi saba, wakati ambapo vipengele vipya vitaongezwa na hitilafu zitarekebishwa. Baada ya hayo, matoleo ya beta yatajaribiwa kwa muda wa miezi mitatu, wakati ambapo nyongeza ya vipengele vipya itakuwa marufuku na tahadhari zote zitalipwa kwa kurekebisha mende. Miezi miwili ya mwisho kabla ya kuachiliwa, tawi litakuwa katika hatua ya mgombea kuachiliwa, ambapo uimarishaji wa mwisho utafanywa.

Nyongeza mpya katika Python 3.11 ni pamoja na:

  • Kazi kubwa imefanywa ili kuboresha utendaji. Tawi jipya linajumuisha mabadiliko yanayohusiana na uongezaji kasi na upelekaji wa ndani wa simu za kazi, matumizi ya wakalimani wa haraka wa shughuli za kawaida (x+x, x*x, xx, a[i], a[i] = z, f( arg) C( arg), o.method(), o.attr = z, *seq), pamoja na uboreshaji uliotayarishwa na miradi ya Cinder na HotPy. Kulingana na aina ya mzigo, kuna ongezeko la kasi ya utekelezaji wa kanuni kwa 10-60%. Kwa wastani, utendaji wakati wa kufaulu mtihani wa utendakazi uliongezeka kwa 25%.

    Utaratibu wa uakibishaji wa bytecode umeundwa upya, ambayo ilipunguza muda wa kuanza kwa mkalimani kwa 10-15%. Vitu vilivyo na msimbo na bytecode sasa vimegawiwa kwa takwimu na mkalimani, ambayo ilifanya iwezekane kuondoa hatua za kutenganisha bytecode iliyotolewa kutoka kwa kache na kubadilisha vitu kwa msimbo wa kuwekwa kwenye kumbukumbu inayobadilika.

  • Wakati wa kuonyesha ufuatiliaji wa simu katika ujumbe wa uchunguzi, taarifa hutolewa kuhusu usemi uliosababisha hitilafu (hapo awali, ni laini pekee iliyoangaziwa bila kueleza ni sehemu gani ya laini iliyosababisha kosa). Taarifa zilizopanuliwa za ufuatiliaji zinaweza pia kurejeshwa kupitia API na kutumiwa kuweka maagizo ya baiti mahususi kwa nafasi maalum katika msimbo wa chanzo kwa kutumia mbinu ya codeobject.co_positions() au chaguo za kukokotoa za PyCode_Addr2Location() C API. Mabadiliko hayo hurahisisha sana matatizo ya utatuzi yanayohusiana na vipengee vya kamusi vilivyoorodheshwa, simu nyingi za utendakazi, na usemi changamano wa hesabu. Traceback (simu ya hivi majuzi zaidi): Faili "calculation.py", mstari wa 54, matokeo = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divisheni kwa sufuri
  • Usaidizi ulioongezwa kwa vikundi vya vighairi, na kuipa programu uwezo wa kutengeneza na kuchakata vighairi kadhaa tofauti kwa wakati mmoja. Aina mpya za vighairi ExceptionGroup na BaseExceptionGroup zinapendekezwa kwa kuweka kando vighairi kadhaa na maombi yao ya pamoja, na usemi "isipokuwa*" huongezwa ili kutenganisha vighairi kutoka kwa kikundi.
  • Njia ya add_note() imeongezwa kwa darasa la BaseException, ambayo hukuruhusu kuambatisha kidokezo cha maandishi kwa ubaguzi, kwa mfano, kuongeza maelezo ya muktadha ambayo hayakupatikana wakati ubaguzi ulipotupwa.
  • Aina maalum ya Self imeongezwa ili kuwakilisha darasa la sasa la kibinafsi. Binafsi inaweza kutumika kufafanua njia zinazorudisha mfano wa darasa lao kwa njia rahisi kuliko kutumia TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Aina maalum ya LiteralString imeongezwa ambayo inaweza tu kujumuisha maandishi ya mfuatano ambayo yanaoana na aina ya LiteralString (yaani, nyuzi tupu na mifuatano ya aina ya LiteralString, lakini sio mifuatano ya kiholela au iliyounganishwa ya aina ya str). Aina ya LiteralString inaweza kutumika kupunguza upitishaji wa hoja za mfuatano kwa vitendakazi, ubadilishaji holela wa sehemu za mifuatano ambayo inaweza kusababisha athari, kwa mfano, wakati wa kutengeneza mifuatano ya hoja za SQL au amri za ganda. def run_query(sql: LiteralString) -> ... ... def mpigaji(arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Hamna: run_query("CHAGUA * KUTOKA KWA wanafunzi") # sawa run_query(literal_string) # sawa run_query( "CHAGUA * KUTOKA " + literal_string) # ok run_query(arbitrary_string) # Hitilafu run_query( # Hitilafu f"SELECT * KUTOKA kwa wanafunzi WHERE name = {arbitrary_string}")
  • Aina ya TypeVarTuple imeongezwa, ambayo inaruhusu matumizi ya jenetiki tofauti, tofauti na TypeVar, isiyojumuisha aina moja, lakini idadi ya kiholela ya aina.
  • Maktaba ya kawaida inajumuisha moduli ya tomllib iliyo na vitendaji vya kuchanganua umbizo la TOML.
  • Uwezo wa kutia alama vipengele mahususi vya kamusi zilizochapwa (TypedDict) kwa alama Inayohitajika na Zisizohitajika hutolewa ili kubainisha sehemu zinazohitajika na za hiari (kwa chaguo-msingi, sehemu zote zilizotangazwa zinahitajika ikiwa kigezo cha jumla hakijawekwa kuwa Sivyo). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # SAWA (uga wa mwaka ni wa hiari) m3: Filamu = {"mwaka": 2022} # Hitilafu, sehemu ya mada inayohitajika haikujazwa)
  • Darasa la TaskGroup limeongezwa kwenye moduli ya asyncio kwa utekelezaji wa kidhibiti muktadha kisicholingana ambacho hungoja kikundi cha kazi kukamilisha. Kuongeza kazi kwenye kikundi hufanywa kwa kutumia njia ya create_task(). async def main(): async na asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print("Kazi zote mbili zimekamilika sasa.")
  • Darasa lililoongezwa, mbinu na kipambaji cha kazi @dataclass_transform, inapobainishwa, kikagua aina tuli hushughulikia kitu kana kwamba kinatumia kipambo cha @dataclasses.dataclass. Katika mfano ulio hapa chini, darasa la CustomerModel litaangaliwa kama darasa na kipamba cha @dataclasses.dataclass, i.e. kama kuwa na __init__ njia ambayo inaruhusu id na vijiwezo vya jina. @dataclass_transform() darasa ModelBase: … darasa CustomerModel(ModelBase): kitambulisho: int name: str
  • Imeongeza uwezo wa kutumia kambi za atomiki ((?>…)) na vikadiriaji vyenye wivu (vyenye) (+, ++, ?+, {m,n}+) katika usemi wa kawaida.
  • Chaguo la mstari wa amri "-P" limeongezwa na utofautishaji wa mazingira wa PYTHONSAFEPATH ili kuzima kiambatisho kiotomatiki cha njia zisizo salama za faili kwa sys.path.
  • Imeboresha kwa kiasi kikubwa matumizi ya py.exe kwa jukwaa la Windows, ambalo sasa linaauni syntax ya "-V:". / " pamoja na "- . ".
  • Macro nyingi katika API ya C zimebadilishwa kuwa kazi za kawaida au tuli za ndani.
  • Uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, na moduli za sunau zimeacha kutumika na zitaondolewa kwenye Python. 3.13 kutolewa. Vitendaji vya PyUnicode_Encode* vimeondolewa.

Chanzo: opennet.ru

Kuongeza maoni