Guido van Rossum propozoi shtimin e operatorëve të përputhjes së modelit në Python

Guido van Rossum paraqitur draft për shqyrtim nga komuniteti specifikimet për zbatimin e operatorëve të përputhjes së modeleve (përputhja dhe rasti) në Python. Duhet të theksohet se propozimet për të shtuar operatorë të përputhjes së modeleve janë publikuar tashmë në 2001 dhe 2006 (pep-0275, pep-3103), por u refuzuan në favor të optimizimit të konstruksionit "nëse ... elif ... tjetër" për përpilimin e zinxhirëve të përputhjes.

Zbatimi i ri është shumë i ngjashëm me operatorin "match" të ofruar në Scala, Rust dhe F#, i cili krahason rezultatin e një shprehjeje të specifikuar me një listë modelesh të listuara në blloqe bazuar në operatorin "rast". Ndryshe nga operatori "switch" i disponueshëm në C, Java dhe JavaScript, shprehjet e bazuara në "match" ofrojnë shumë më tepër funksionalitet të gjerë. Vihet re se operatorët e propozuar do të përmirësojnë lexueshmërinë e kodit, do të thjeshtojnë krahasimin e objekteve arbitrare të Python dhe korrigjimin, si dhe do të rrisin besueshmërinë e kodit falë mundësisë së zgjatjes kontrollimi i tipit statik.

def http_error(status):
statusi i ndeshjes:
rasti 400:
kthej "kërkesë e keqe"
rasti 401|403|404:
kthehu "Nuk lejohet"
rasti 418:
kthehu "Unë jam një çajnik"
rast_:
kthej "Diçka tjetër"

PĂ«r shembull, mund tĂ« shpaketoni objekte, tuple, lista dhe sekuenca arbitrare pĂ«r tĂ« lidhur variabla bazuar nĂ« vlerat ekzistuese. Lejohet tĂ« pĂ«rcaktohen shabllone tĂ« ndĂ«rthurur, tĂ« pĂ«rdoren kushte shtesĂ« "nĂ«se" nĂ« shabllon, pĂ«rdorimi i maskave ("[x, y, *rest]"), pasqyrimet e çelĂ«save/vlerave (pĂ«r shembull, {"gjerĂ«sia e brezit": b, "latenca ”: l} pĂ«r tĂ« nxjerrĂ« vlerat dhe fjalorin e "gjerĂ«sisĂ« sĂ« brezit" dhe "latencĂ«s", nxjerr nĂ«n-shabllonet (":=" operatori), pĂ«rdorni konstante tĂ« emĂ«rtuara nĂ« shabllon. NĂ« klasa, Ă«shtĂ« e mundur tĂ« personalizoni sjelljen e pĂ«rputhjes duke pĂ«rdorur metodĂ«n "__match__()".

nga klasa e të dhënave importon klasën e të dhënave

@dataclass
Pika e klasës:
x:int
y:int

defini ku është (pika):
pika e ndeshjes:
rasti Pika (0, 0):
print ("Origjina")
rasti Pika (0, y):
print(f"Y={y}")
rasti Pika (x, 0):
print(f"X={x}")
case Point():
print ("Diku tjetër")
rast_:
print ("Asnjë pikë")

pika e ndeshjes:
rasti Pika (x, y) nëse x == y:
print (f"Y=X në {x}")
rasti Pika (x, y):
print (f"Jo në diagonale")

E KUQE, E GJELBËR, BLU = 0, 1, 2
ngjyra e ndeshjes:
rasti .KUQ:
print ("Unë shoh të kuqe!")
rasti .E GJELBËR:
print ("Bari është jeshil")
rasti .BLU
E:
print ("Po ndjej bluesin :(")

Një grup është përgatitur për shqyrtim arna me eksperimentale zbatimi specifikimet e propozuara, por versioni përfundimtar është ende diskutohet. Për shembull, ofruar Në vend të shprehjes "rast _:" për vlerën e paracaktuar, përdorni fjalën kyçe "tjetër:" ose "default:", pasi "_" në kontekste të tjera përdoret si një variabël i përkohshëm. Gjithashtu i diskutueshëm është organizimi i brendshëm, i cili bazohet në përkthimin e shprehjeve të reja në bytekod të ngjashëm me atë të përdorur për konstruktet "if ... elif ... else", i cili nuk do të sigurojë performancën e dëshiruar kur përpunohen grupe shumë të mëdha krahasimesh.

Burimi: opennet.ru

Bleni njĂ« host tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, serverĂ« VPS VDS đŸ”„ Bleni hosting tĂ« besueshĂ«m tĂ« faqeve tĂ« internetit me mbrojtje DDoS, servera VPS VDS | ProHoster