Kutolewa kwa lugha ya programu ya Python 3.10

Baada ya mwaka wa maendeleo, kutolewa muhimu kwa lugha ya programu ya Python 3.10 inawasilishwa. Tawi jipya litasaidiwa kwa mwaka mmoja na nusu, baada ya hapo kwa miaka mingine mitatu na nusu, marekebisho yatatolewa kwa ajili yake ili kuondoa udhaifu.

Wakati huo huo, majaribio ya alpha ya tawi la Python 3.11 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.11 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.10 ni pamoja na:

  • Viendeshaji "mechi" na "kesi" vilivyotekelezwa kwa kulinganisha muundo, ambavyo huboresha usomaji wa msimbo, kurahisisha ulinganishaji wa vitu vya Python kiholela, na kuongeza utegemezi wa msimbo kupitia ukaguzi wa hali ya juu wa aina tuli. Utekelezaji ni kama opereta wa "mechi" iliyotolewa katika Scala, Rust, na F#, ambayo inalinganisha matokeo ya usemi maalum na orodha ya ruwaza zilizoorodheshwa kwenye vizuizi kulingana na opereta "kesi".

    def http_error(hadhi): hali inayolingana: kesi 400: rudisha "Ombi baya" kesi 401|403|404: rudisha "Hairuhusiwi" kesi 418: rudisha "Mimi ni buli" kesi _: rudisha "Jambo lingine"

    Unaweza kufungua vitu, nakala, orodha, na mfuatano holela ili kuunganisha vigeu kulingana na thamani zilizopo. Inaruhusiwa kufafanua violezo vilivyowekwa, kutumia masharti ya ziada ya "ikiwa" kwenye kiolezo, tumia vinyago ("[x, y, *rest]"), upangaji wa vitufe/thamani (kwa mfano, {"bandwidth": b, "latency ”: l} ili kutoa thamani za "bandwidth" na "latency" kutoka kwa kamusi), toa violezo vidogo (":=" mwendeshaji), tumia viunga vilivyotajwa kwenye kiolezo. Katika madarasa, inawezekana kubinafsisha tabia inayolingana kwa kutumia mbinu ya "__match__()".

    kutoka kwa darasa la kuagiza darasa la darasa la @dataclass Point: x: int y: int def whereis(point): point point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") kesi Pointi(x, 0): chapa(f"X={x}") kesi Point(): chapisha("Mahali pengine") mfano _: chapisha("Si pointi") mechi point: case Point(x, y) ikiwa x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Si kwenye diagonal") RED, GREEN, BLUE = 0, 1, 2 rangi inayolingana: kipochi NYEKUNDU: chapa(β€œNaona nyekundu!”) kipochi KIJANI: chapa(β€œNyasi ni kijani”) kipochi BLUE: chapa(β€œNinahisi hali ya samawati :(β€œ)

  • Sasa inawezekana kutumia mabano katika taarifa ili kugawanya ufafanuzi wa mkusanyiko wa wasimamizi wa muktadha katika mistari mingi. Inaruhusiwa pia kuacha koma baada ya msimamizi wa muktadha wa mwisho kwenye kikundi: na ( CtxManager1() kama mfano1, CtxManager2() kama mfano2, CtxManager3() kama mfano3, ): ...
  • Utoaji wa taarifa ulioboreshwa wa eneo la msimbo wa hitilafu zinazohusiana na viunga ambavyo havijafungwa na manukuu katika maandishi ya mfuatano. Kwa mfano, wakati kuna brace isiyofungwa, badala ya kuripoti hitilafu ya kisintaksia katika ujenzi ufuatao, pointer sasa inaangazia brace inayofungua na inaonyesha kuwa hakuna kizuizi cha kufunga. Faili "example.py", mstari wa 1 unatarajiwa = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' haikuwahi kufungwa

    Imeongeza ujumbe maalum wa makosa ya kisintaksia: kukosa ":" ishara kabla ya kizuizi na katika kamusi, bila kutenganisha nakala na mabano, kukosa koma katika orodha, kubainisha kizuizi cha "jaribu" bila "isipokuwa" na "mwishowe", kwa kutumia "= " badala ya "= =" kwa kulinganisha, ikibainisha *-maneno katika mifuatano ya f. Kwa kuongezea, inahakikisha kuwa usemi mzima wa shida umeangaziwa, sio mwanzo tu, na habari wazi zaidi juu ya muktadha wa makosa yanayohusiana na ujongezaji usio sahihi. >>> def foo(): ... if lel: ... x = 2 Faili " ", mstari wa 3 x = 2 ^ IndentationError: ilitarajia kizuizi kilichowekwa ndani baada ya taarifa ya 'ikiwa' katika mstari wa 2.

    Katika makosa yanayosababishwa na chapa katika majina ya sifa na majina tofauti katika chaguo za kukokotoa, pendekezo lililo na jina sahihi hutolewa. >>>collections.namedtoplo Traceback (simu ya hivi majuzi): Faili Β« ", mstari wa 1, ndani Hitilafu ya Attribute: sehemu ya 'mikusanyiko' haina sifa ya 'namedtoplo'. Ulimaanisha: jinatuple?

  • Kwa zana za utatuzi na wasifu, ufuatiliaji wa matukio hutolewa na nambari kamili za msimbo uliotekelezwa.
  • Umeongeza mpangilio wa sys.flags.warn_default_encoding ili kuonyesha onyo kuhusu hitilafu zinazoweza kutokea zinazohusiana na TextIOWrapper na open() kuchakata faili zilizosimbwa za UTF-8 bila kubainisha kwa uwazi chaguo la 'encoding=Β»utf-8β€³' (usimbaji wa ASCII hutumiwa kwa chaguomsingi). Toleo jipya pia hutoa uwezo wa kubainisha thamani ya 'encoding="locale"' ili kuweka usimbaji kulingana na lugha ya sasa.
  • Opereta mpya imeongezwa kwenye moduli ya kuandika, ambayo hutoa zana za kubainisha maelezo ya aina, kukuruhusu kutumia sintaksia β€œX | Y" kuchagua moja ya aina (aina ya X au aina ya Y). def square(nambari: int | kuelea) -> int | kuelea: nambari ya kurudisha ** 2 ni sawa na muundo uliotumika hapo awali: def square(nambari: Union[int, float]) -> Muungano[int, float]: nambari ya kurudisha ** 2
  • Opereta ya Concatenate na kigezo cha ParamSpec kimeongezwa kwenye moduli ya kuandika, ambayo hukuruhusu kupitisha maelezo ya ziada kwa kuangalia aina tuli unapotumia Callable. Moduli ya kuandika pia huongeza thamani maalum TypeGuard ili kufafanua vipengele vya ulinzi vya aina na TypeAlias ​​kufafanua kwa uwazi lakabu ya aina. StrCache: TypeAlias ​​= 'Cache[str]' # aina ya pak
  • Chaguo za kukokotoa zip() hutekelezea alama ya hiari ya "madhubuti", ambayo, inapobainishwa, hukagua ikiwa hoja zinazorudiwa ni za urefu sawa. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (simu ya hivi majuzi ): … ValueError: zip() hoja ya 2 ni ndefu kuliko hoja 1
  • Vipengele vipya vya kukokotoa vilivyojengewa ndani aiter() na anext() vinapendekezwa pamoja na utekelezaji wa mlinganisho wa asynchronous kwa kazi iter() na inayofuata().
  • Kazi ya wajenzi wa str (), byte () na bytearray () wakati wa kufanya kazi na vitu vidogo imeharakishwa na 30-40%.
  • Imepunguza idadi ya shughuli za uingizaji katika moduli ya kukimbia. Amri "python3 -m module_name" sasa inaendesha kwa wastani mara 1.4 haraka kwa sababu ya kupunguzwa kwa moduli zilizoingizwa kutoka 69 hadi 51.
  • Maagizo ya LOAD_ATTR hutumia utaratibu wa kuakibisha kwa misimbo ya mtu binafsi, ambayo ilifanya iwezekane kuharakisha kazi na sifa za kawaida kwa hadi 36%, na kwa nafasi kwa hadi 44%.
  • Wakati wa kujenga Python na chaguo la "--enable-optimizations", hali ya "-fno-semantic-interposition" sasa imewashwa, ambayo inaruhusu kuongeza kasi ya mkalimani kwa hadi 30% ikilinganishwa na kujenga kwa "--wezesha-kushirikiwa. ” chaguo.
  • Moduli za hahlib na ssl zimeongeza usaidizi kwa OpenSSL 3.0.0 na zimeacha kutumia matoleo ya OpenSSL ya zamani zaidi ya 1.1.1.
  • Kichanganuzi cha zamani kimeondolewa, ambacho kilibadilishwa katika tawi lililopita na kichanganuzi cha PEG (Parsing Expression Grammar). Moduli ya umbizo imeondolewa. Kigezo cha kitanzi kimeondolewa kwenye API ya asyncio. Mbinu ambazo hapo awali ziliacha kutumika zimeondolewa. Vitendaji vya Py_UNICODE_str* ambavyo huchezea mifuatano ya Py_UNICODE* vimeondolewa.
  • Moduli ya distutils imeacha kutumika na imepangwa kuondolewa katika Python 3.12. Badala ya distutils, inashauriwa kutumia setuptools, ufungaji, jukwaa, shutil, subprocess na sysconfig modules. Muundo wa wstr katika PyUnicodeObject umeacha kutumika na umeratibiwa kuondolewa.

Chanzo: opennet.ru

Kuongeza maoni