Weşandina zimanê bernamekirinê Python 3.10

Piştî salek pêşveçûnê, serbestberdana girîng a zimanê bernamenûsê Python 3.10 tê pêşkêş kirin. Şaxa nû dê salek û nîv were piştgirî kirin, piştî wê sê sal û nîvên din dê ji bo rakirina qelsiyan serrastkirin bêne çêkirin.

Di heman demê de, ceribandina alpha ya şaxê Python 3.11 dest pê kir (li gorî nexşeya pêşkeftina nû, xebata li ser şaxek nû pênc meh berî berdana şaxê berê dest pê dike û heya dema berdana din digihîje qonaxa ceribandina alpha ). Şaxa Python 3.11 dê heft mehan di serbestberdana alpha de be, di nav vê yekê de dê taybetmendiyên nû werin zêdekirin û xeletî bêne rast kirin. Piştî vê yekê, guhertoyên betayê dê sê mehan werin ceribandin, di nav wan de zêdekirina taybetmendiyên nû dê were qedexe kirin û dê hemî bal were ser rastkirina xeletiyan. Du mehên dawîn ên beriya berdanê, şax dê di qonaxa berendamê berdanê de be, ku tê de stabîlkirina dawîn dê were kirin.

Zêdekirinên nû yên Python 3.10 ev in:

  • Operatorên "maç" û "doz" ji bo lihevhatina nimûneyê, ku xwendina kodê baştir dikin, lihevhatina tiştên keyfî yên Python hêsan dikin, û pêbaweriya kodê bi kontrolkirina tîpên statîk ên pêşkeftî zêde dikin. Bicîhkirin pir dişibihe operatora "maça" ya ku di Scala, Rust, û F# de hatî peyda kirin, ku encama vegotinek diyarkirî bi navnîşek nimûneyên ku di blokan de li ser bingeha operatora "doz" têne navnîş kirin berhev dike.

    def http_error(rewş): statûya hevberdanê: doz 400: vegere "Daxwaza xirab" mesele 401|403|404: vegere "Ne destûr" doz 418: vegere "Ez çaydank im" doz _: vegere "Tiştek din"

    Hûn dikarin tiştan, pirtikan, navnîşan û rêzikên keyfî vekin da ku guhêrbaran li ser bingeha nirxên heyî girêdin. Destûr e ku meriv şablonên hêlînkirî destnîşan bike, di şablonê de şertên "heke" yên din bikar bîne, maskeyan bikar bîne ("[x, y, *rest]"), nexşeyên kilît/nirx (mînak, {"bandfireh": b, "derengî" ”: l} ji bo derxistina nirxên "berfirehî" û "derengiyê" ji ferhengê), jêderxistina jêrşablonan (":=" operator), di şablonekê de domdarên binavkirî bikar bînin. Di dersan de, bi karanîna rêbaza "__match__()" gengaz e ku meriv tevgerê lihevhatî xweş bike.

    ji çînên daneyan dataclass import dike @dataclass class Xal: x: int y: int def ku (xal): xala hevberdanê: rewş Xal (0, 0): çap ("Esl") rewş Point(0, y): çap (f" Y={y}") mesele Xalê(x, 0): çap bike(f"X={x}") meselê Xalê(): çap bike("Ciyekî din") mesele _: çap bike("Ne xalek") lihev bike xal: hal Xal(x, y) heke x == y: çap bike(f"Y=X li {x}") hal Point(x, y): çap bike(f"Ne li ser diagonalê") SOR, KESK, ŞÎN = 0, 1, 2 Rengê lihevhatî: qertaf SOR: çap (“Ez sor dibînim!”) KESK: çap (“Giya kesk e”) mezel ŞÎN: çap (“Ez şînê hîs dikim :(“)

  • Naha mimkun e ku meriv di beyana bi danûstendinê de parantezê bikar bîne da ku pênaseya berhevokek rêveberên kontekstê li ser gelek rêzan dabeş bike. Di heman demê de destûr tê dayîn ku piştî rêveberê çarçoweya paşîn di komê de kommanek bihêle: bi ( CtxManager1 () wekî mînak1, CtxManager2 () wekî mînak2, CtxManager3 () wekî mînak3, ): ...
  • Raporkirina çêtir a cîhê kodê ya xeletiyên ku bi brayên negirtî û binavkên bi tîpên rêzikan ve girêdayî ne. Mînakî, dema ku kelekek negirtî hebe, li şûna ku di avakirina jêrîn de xeletiyek hevoksaziyê rapor bike, nîşanker naha pişka vekirinê ronî dike û destnîşan dike ku bloka girtinê tune. Pela "example.py", rêza 1 çaverêkirî = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' qet nehat girtin

    Peyamên xeletiya hevoksaziyê yên pispor lê zêde kirin: nîşana ":" li ber blokekê û di ferhengan de winda ne, jimareyek bi parantezê veneqetînin, di navnîşan de xêzek wenda bikin, blokek "biceribîne" bêyî "ji bilî" û "dawiyê" diyar bikin, bi karanîna "=. " li şûna "= =" di danberhevan de, *-biwêjên di f-rêzan de diyar bikin. Digel vê yekê, ew piştrast dike ku tevahiya îfadeya pirsgirêkê, ne tenê destpêkê, û agahdariya zelaltir di derbarê çarçoweya xeletiyên ku bi xêzkirina nerast ve girêdayî ne tê ronî kirin. >>> def foo(): ... heke lel: ... x = 2 Pelê " ", rêza 3 x = 2 ^ IndentationError: piştî daxuyaniya 'eger' di rêza 2-ê de bloka binavkirî tê hêvîkirin

    Di xeletiyên ku ji ber tîpên di navên taybetmendî û navên guhêrbar ên fonksiyonê de çêdibin, pêşniyarek bi navê rast derdikeve holê. >>>collections.namedtoplo Traceback (banga herî dawî ya dawî): Pel « ", rêza 1, li TaybetmendîError: modula 'collections' taybetmendiya 'namedtoplo' nîne. Mebesta te bû: namedtuple?

  • Ji bo amûr û profîlkerên xeletkirinê, bûyerên şopandinê bi jimareyên rêza rastîn ên koda darvekirî têne peyda kirin.
  • Mîhenga sys.flags.warn_default_encoding lê zêde kir da ku hişyariyek li ser xeletiyên potansiyel ên bi TextIOWrapper re têkildar nîşan bide û pelên kodkirî yên UTF-8-ê pelên vekirî() hildiweşîne bêyî ku bi eşkere vebijarka 'encoding=»utf-8' diyar bike (kodkirina ASCII ji hêla xwerû ve tê bikar anîn). Daxuyaniya nû di heman demê de şiyana diyarkirina nirxek 'encoding="locale"' peyda dike da ku kodkirinê li ser bingeha cîhê heyî were danîn.
  • Operatorek nû li modula nivîsandinê hate zêdekirin, ku amûrên ji bo diyarkirina annotasyonên tîpan peyda dike, ku destûrê dide karanîna hevoksaziya "X | Y" ji bo hilbijartina yek ji cureyên (X type an Y type). def square(hejmar: int | float) -> int | float: vegere jimare ** 2 bi avantajê ya ku berê hatiye destek kirin hevwate ye: def square(hejmar: Yekîtî[int, float]) -> Yekîtî[int, float]: jimare vegere ** 2
  • Operatorê Concatenate û guhêrbar ParamSpec li modula tîpkirinê hatine zêdekirin, ku dihêle hûn dema ku Callable bikar tînin ji bo kontrolkirina celebê statîk agahdariya zêde derbas bikin. Modula nivîsandinê di heman demê de nirxên taybetî yên TypeGuard zêde dike da ku fonksiyonên parastina celeb û TypeAlias ​​destnîşan bike da ku bi eşkere celebek navek diyar bike. StrCache: TypeAlias ​​= 'Cache[str]' # navekî cûreyek
  • Fonksîyona zip() alayek "hişk" ya vebijarkî pêk tîne, ku gava were destnîşan kirin, kontrol dike ka argumanên ku têne dubare kirin bi heman dirêjî ne. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), hişk=rast)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], hişk=Rast)) Traceback (banga herî dawî ya dawî ): … ValueError: zip() argumana 2 ji argumana 1 dirêjtir e
  • Fonksiyonên nû yên çêkirî aiter() û anext() bi pêkanîna analogên asînkron ji fonksiyonên iter() û next() re têne pêşniyar kirin.
  • Xebata çêkerên str(), bytes() û bytearray() dema ku bi tiştên piçûk re dixebitin ji %30-40 leztir bûye.
  • Di modula runpy de hejmara operasyonên importê kêm kir. Fermana "python3 -m module_name" naha ji ber kêmkirina modulên îthalkirî ji 1.4 ber 69 bi navînî 51 carî zûtir dimeşe.
  • Telîmata LOAD_ATTR ji bo opcodên takekesî mekanîzmayek cachkirinê bikar tîne, ku ev gengaz kir ku xebata bi taybetmendiyên birêkûpêk heya% 36, û bi slots heya% 44% bileztir bike.
  • Dema ku Python bi vebijarka "--çalak-optimîzasyonan" tê çêkirin, êdî moda "-fno-semantic-interposition" tê çalak kirin, ku dihêle ku werger ji sedî 30 bileztir bibe li gorî avakirina bi "--çalak-parvekirin". ” vebijêrk.
  • Modulên haşlib û ssl piştgirî ji OpenSSL 3.0.0 re zêde kirin û piştgirîya guhertoyên OpenSSL yên ji 1.1.1 kevntir rawestand.
  • Parsera kevin hate rakirin, ku di şaxê berê de ji hêla parsera PEG (Parsing Expression Grammar) ve hate guherandin. Modula formatker hate rakirin. Parametreya loopê ji asyncio API-ê hat rakirin. Rêbazên ku berê hatibûn betal kirin hatin rakirin. Fonksiyonên Py_UNICODE_str* yên ku rêzikên Py_UNICODE* manîpule dikin hatin rakirin.
  • Modula distutils hate betal kirin û ji bo rakirina di Python 3.12 de hatî plan kirin. Li şûna distutilan, tê pêşniyar kirin ku modulên mîheng, pakkirin, platform, shutil, subprocess û sysconfig bikar bînin. Struktura wstr ya di PyUnicodeObject de hate betal kirin û ji bo rakirinê hate plansaz kirin.

Source: opennet.ru

Add a comment