Rilaxx tal-lingwa ta 'programmar Python 3.10

Wara sena ta 'żvilupp, ir-rilaxx sinifikanti tal-lingwa ta' programmar Python 3.10 huwa ppreżentat. Il-fergħa l-ġdida se tkun sostnuta għal sena u nofs, u wara għal tliet snin u nofs oħra, jiġu ġġenerati rranġati għaliha biex telimina l-vulnerabbiltajiet.

Fl-istess ħin, beda l-ittestjar alfa tal-fergħa Python 3.11 (skond l-iskeda l-ġdida tal-iżvilupp, ix-xogħol fuq fergħa ġdida jibda ħames xhur qabel ir-rilaxx tal-fergħa preċedenti u jilħaq l-istadju tal-ittestjar alfa saż-żmien tar-rilaxx li jmiss ). Il-fergħa Python 3.11 se tkun f'rilaxxi alfa għal seba 'xhur, li matulhom se jiżdiedu karatteristiċi ġodda u l-bugs se jiġu rranġati. Wara dan, il-verżjonijiet beta se jiġu ttestjati għal tliet xhur, li matulhom iż-żieda ta 'karatteristiċi ġodda se tkun ipprojbita u se tingħata l-attenzjoni kollha għall-iffissar tal-bugs. L-aħħar xahrejn qabel ir-rilaxx, il-fergħa tkun fl-istadju tal-kandidat għar-rilaxx, fejn se titwettaq l-istabbilizzazzjoni finali.

Żidiet ġodda f'Python 3.10 jinkludu:

  • Implimentaw operaturi "taqbil" u "każ" għat-tqabbil tal-mudelli, li jtejbu l-qari tal-kodiċi, jissimplifikaw it-tqabbil ta 'oġġetti Python arbitrarji, u jżidu l-affidabilità tal-kodiċi permezz ta' verifika tat-tip statika avvanzata. L-implimentazzjoni hija ħafna bħall-operatur "taqbil" ipprovdut fi Scala, Rust, u F#, li jqabbel ir-riżultat ta 'espressjoni speċifikata ma' lista ta 'mudelli elenkati fi blokki bbażati fuq l-operatur "każ".

    def http_error(status): match status: każ 400: ritorn “Talba ħażina” każ 401|403|404: ritorn “Mhux permess” każ 418: ritorn “Jien teapot” każ _: ritorn “Xaġa oħra”

    Tista' tispakkja oġġetti, tuples, listi, u sekwenzi arbitrarji biex torbot varjabbli bbażati fuq valuri eżistenti. Huwa permess li jiġu definiti mudelli nested, tuża kundizzjonijiet addizzjonali "jekk" fil-mudell, tuża maskri ("[x, y, *mistrieħ]"), mappings taċ-ċavetta/valur (per eżempju, {"bandwidth": b, "latency" ”: l} biex jiġu estratti l-valuri tal-"bandwidth" u "latency" minn dizzjunarju), estratti sottotemplates (":=" operatur), uża kostanti msemmija f'mudell. Fil-klassijiet, huwa possibbli li tippersonalizza l-imġiba ta 'tqabbil bl-użu tal-metodu "__match__()".

    minn dataclasses importazzjoni dataclass @dataclass class Punt: x: int y: int def whereis(punt): punt ta' tqabbil: każ Punt(0, 0): print("Oriġini") każ Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("X'imkien ieħor") case _: print("Mhux punt") match punt: każ Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Mhux fuq id-dijagonali") AĦMAR, AĦDAR, BLUE = 0, 1, 2 taqbila kulur: każ AĦMAR: print(“Nara aħmar!”) każ AĦDAR: print(“Grass is green”) każ BLUE: print(“Qed inħoss il-blu :(“)

  • Issa huwa possibbli li tuża parentesi fid-dikjarazzjoni with biex taqsam id-definizzjoni ta 'ġabra ta' maniġers tal-kuntest fuq linji multipli. Huwa permess ukoll li tħalli virgola wara l-maniġer tal-kuntest finali fil-grupp: bi ( CtxManager1() bħala eżempju1, CtxManager2() bħala eżempju2, CtxManager3() bħala eżempju3, ): ...
  • Rappurtar imtejjeb tal-lokazzjoni tal-kodiċi ta 'żbalji relatati ma' ċineg mhux magħluqa u kwotazzjonijiet f'litterali ta 'sekwenza. Pereżempju, meta jkun hemm ċinga mhux magħluqa, minflok ma tirrapporta żball ta' sintassi fil-kostruzzjoni li ġejja, il-pointer issa jenfasizza ċ-ċinga tal-ftuħ u jindika li m'hemm l-ebda blokka tal-għeluq. Fajl "example.py", linja 1 mistennija = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' qatt ma ngħalaq

    Miżjud messaġġi ta' żball ta' sintassi speċjalizzati addizzjonali: nieqes is-simbolu ":" qabel blokka u fid-dizzjunarji, ma tissepara tuple bil-parentesi, nieqsa virgola fil-listi, li tispeċifika blokka "pprova" mingħajr "ħlief" u "finalment", bl-użu ta' "= " minflok "= =" fil-paraguni, tispeċifika *-espressjonijiet f-strings. Barra minn hekk, jiżgura li l-espressjoni problematika kollha tkun enfasizzata, mhux biss il-bidu, u informazzjoni aktar espliċita dwar il-kuntest ta 'żbalji assoċjati ma' indentazzjoni mhux korretta. >>> def foo(): ... jekk lel: ... x = 2 File " ", linja 3 x = 2 ^ IndentationError: mistenni blokka indentata wara dikjarazzjoni 'jekk' fil-linja 2

    Fi żbalji kkawżati minn typos fl-ismijiet tal-attributi u l-ismijiet varjabbli f'funzjoni, toħroġ rakkomandazzjoni bl-isem korrett. >>> collections.namedtoplo Traceback (l-aħħar sejħa l-aħħar): File « ", linja 1, in AttributeError: il-modulu 'kollezzjonijiet' m'għandu l-ebda attribut 'namedtoplo'. Ridt tfisser: namedtuple?

  • Għal għodod ta 'debugging u profilers, avvenimenti ta' traċċa huma pprovduti bin-numri eżatti tal-linja tal-kodiċi esegwit.
  • Żieda l-issettjar sys.flags.warn_default_encoding biex juri twissija dwar żbalji potenzjali assoċjati ma' TextIOWrapper u open() li jipproċessa fajls kodifikati UTF-8 mingħajr ma speċifikat b'mod espliċitu l-għażla 'encoding=»utf-8″' (kodifikazzjoni ASCII tintuża b'mod awtomatiku) . Ir-rilaxx il-ġdid jipprovdi wkoll il-ħila li tispeċifika valur 'encoding="locale"' biex tissettja l-kodifikazzjoni bbażata fuq il-lokal attwali.
  • Operatur ġdid ġie miżjud mal-modulu tat-tajpjar, li jipprovdi għodod għall-ispeċifikazzjoni ta' annotazzjonijiet tat-tip, li jippermetti l-użu tas-sintassi “X | Y" biex tagħżel wieħed mit-tipi (tip X jew tip Y). def kwadru(numru: int | float) -> int | float: numru tar-ritorn ** 2 huwa ekwivalenti għall-kostrutt appoġġjat qabel: def square(numru: Unjoni[int, float]) -> Unjoni[int, float]: numru tar-ritorn ** 2
  • L-operatur Concatenate u l-varjabbli ParamSpec ġew miżjuda mal-modulu tat-tajpjar, li jippermettulek tgħaddi informazzjoni addizzjonali għall-iċċekkjar tat-tip statiku meta tuża Callable. Il-modulu tat-tajpjar iżid ukoll valuri speċjali TypeGuard biex jannota funzjonijiet ta 'protezzjoni tat-tip u TypeAlias ​​biex jiddefinixxi espliċitament alias tat-tip. StrCache: TypeAlias ​​​​= 'Cache[str]' # alias tat-tip
  • Il-funzjoni zip() timplimenta bandiera "stritta" fakultattiva, li, meta speċifikata, tiċċekkja jekk l-argumenti li qed jiġu ripetuti humiex tal-istess tul. >>> lista(zip(('a', 'b', 'c'), (1, 2, 3), stretta=Veru)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (l-aktar sejħa reċenti l-aħħar ): … ValueError: l-argument 2 zip() huwa itwal mill-argument 1
  • Funzjonijiet ġodda mibnija aiter() u anext() huma proposti bl-implimentazzjoni ta 'analogi asinkroniċi għall-funzjonijiet iter() u next().
  • Ix-xogħol tal-kostrutturi str(), bytes() u bytearray() meta jaħdmu ma 'oġġetti żgħar ġie aċċellerat bi 30-40%.
  • Naqqas in-numru ta 'operazzjonijiet ta' importazzjoni fil-modulu runpy. Il-kmand "python3 -m module_name" issa jaħdem bħala medja 1.4 darbiet aktar malajr minħabba t-tnaqqis tal-moduli importati minn 69 għal 51.
  • L-istruzzjoni LOAD_ATTR tuża mekkaniżmu ta 'caching għal opcodes individwali, li għamilha possibbli li jitħaffef ix-xogħol b'attributi regolari sa 36%, u bi slots sa 44%.
  • Meta tibni Python bl-għażla "--enable-optimizations", il-mod "-fno-semantic-interposition" issa huwa attivat, li jippermetti li l-interpretu jitħaffef sa 30% meta mqabbel mal-bini bil-"--enable-shared ” għażla.
  • Il-moduli hashlib u ssl żiedu l-appoġġ għal OpenSSL 3.0.0 u waqfu jappoġġaw verżjonijiet OpenSSL eqdem minn 1.1.1.
  • Il-parser l-antik tneħħa, li ġie sostitwit fil-fergħa preċedenti mill-parser PEG (Parsing Expression Grammar). Il-modulu tal-formatter tneħħa. Il-parametru tal-linja tneħħa mill-API asyncio. Il-metodi li qabel kienu deprecati tneħħew. Il-funzjonijiet Py_UNICODE_str* li jimmanipulaw strings Py_UNICODE* tneħħew.
  • Il-modulu distutils ġie deprecato u huwa skedat għat-tneħħija f'Python 3.12. Minflok distutils, huwa rakkomandat li tuża l-moduli setuptools, ippakkjar, pjattaforma, shutil, subprocess u sysconfig. L-istruttura wstr f'PyUnicodeObject ġiet deprecata u skedata għat-tneħħija.

Sors: opennet.ru

Żid kumment