Cynigiodd Guido van Rossum ychwanegu gweithredwyr paru patrwm i Python

Guido van Rossum cyflwyno drafft ar gyfer adolygiad cymunedol manylebau ar gyfer gweithredu gweithredwyr paru patrwm (matsio ac achos) yn Python. Dylid nodi bod cynigion i ychwanegu gweithredwyr paru patrwm eisoes wedi’u cyhoeddi yn 2001 a 2006 (pep-0275, pep-3103), ond fe'u gwrthodwyd o blaid optimeiddio'r lluniad “os ... elif ... arall” ar gyfer llunio cadwyni cyfatebol.

Mae'r gweithrediad newydd yn debyg iawn i'r gweithredwr "match" a ddarperir yn Scala, Rust, a F#, sy'n cymharu canlyniad mynegiant penodedig â rhestr o batrymau a restrir mewn blociau yn seiliedig ar y gweithredwr "achos". Yn wahanol i'r gweithredwr "switsh" sydd ar gael yn C, Java, a JavaScript, mae ymadroddion sy'n seiliedig ar "match" yn cynnig llawer mwy ymarferoldeb eang. Nodir y bydd y gweithredwyr arfaethedig yn gwella darllenadwyedd y cod, yn symleiddio'r gymhariaeth o wrthrychau Python mympwyol a dadfygio, a hefyd yn cynyddu dibynadwyedd y cod oherwydd y posibilrwydd o ymestyn. gwirio math statig.

def http_error(statws):
statws cyfatebol:
achos 400:
dychwelyd "Cais drwg"
achos 401|403|404:
dychwelyd "Ni chaniateir"
achos 418:
dychwelyd "Rwy'n tebot"
achos_:
dychwelyd "Rhywbeth arall"

Er enghraifft, gallwch ddadbacio gwrthrychau, tuples, rhestrau, a dilyniannau mympwyol i rwymo newidynnau yn seiliedig ar werthoedd presennol. Caniateir diffinio templedi nythu, defnyddio amodau “os” ychwanegol yn y templed, defnyddio masgiau (“[x, y, * gorffwys]”), mapiadau allwedd/gwerth (er enghraifft, {“lled band”: b, “latency ” : l} i echdynnu gwerthoedd "lled band" a "latency" a geiriadur), echdynnu is-templates ( " : = " gweithredwr), defnyddio cysonion a enwir yn y templed. Mewn dosbarthiadau, mae'n bosibl addasu ymddygiad paru gan ddefnyddio'r dull “__match__()”.

o dataclasses mewnforio dosbarth data

@dosbarthdata
Pwynt dosbarth:
x:int
y:int

def ble mae (pwynt):
pwynt cyfatebol:
Pwynt achos(0, 0):
print ("tarddiad")
Pwynt achos(0, y):
print(f"Y={y}")
Pwynt achos(x, 0):
print(f"X={x}")
Pwynt achos():
print ("Rhywle arall")
achos_:
print ("Dim pwynt")

pwynt cyfatebol:
achos Pwynt(x, y) os x == y:
print(f"Y=X yn {x}")
achos Pwynt(x, y):
print(f"Ddim ar y groeslin")

COCH, GWYRDD, GLAS = 0, 1, 2
lliw cyfatebol:
achos .RED:
print ("Rwy'n gweld coch!")
achos .GREEN:
print ("Mae glaswellt yn wyrdd")
achos .BLU
E:
print("Dwi'n teimlo'r felan :(")

Mae set wedi'i pharatoi i'w hadolygu clytiau ag arbrofol gweithredu fanyleb arfaethedig, ond mae'r fersiwn derfynol yn dal i fod trafod. Er enghraifft cynigiwyd Yn lle'r ymadrodd "case _:" ar gyfer y gwerth rhagosodedig, defnyddiwch yr allweddair "arall:" neu "diofyn:", gan fod "_" mewn cyd-destunau eraill yn cael ei ddefnyddio fel newidyn dros dro. Mae'r drefniadaeth fewnol hefyd yn amheus, sy'n seiliedig ar drosi ymadroddion newydd i god byte tebyg i'r hyn a ddefnyddir ar gyfer lluniadau “os ... elif ... arall”, na fydd yn darparu'r perfformiad dymunol wrth brosesu setiau mawr iawn o gymariaethau.

Ffynhonnell: opennet.ru

Ychwanegu sylw