Guido van Rossum-ek ereduak parekatzeko operadoreak gehitzea proposatu zuen Python-i

Guido van Rossum aurkeztu komunitatearen azterketarako zirriborroa zehaztapenak Python-en ereduak parekatzeko operadoreak (match eta maiuskulak) ezartzeko. Kontuan izan behar da 2001ean eta 2006an ereduak parekatzeko operadoreak gehitzeko proposamenak argitaratu direla (pep-0275, pep-3103), baina bat datozen kateak osatzeko “if ... elif ... else” eraikuntza optimizatzearen alde baztertu ziren.

Inplementazio berria Scala, Rust eta F#-n emandako "match" operadorearen antzekoa da, zeinak zehaztutako adierazpen baten emaitza blokeetan zerrendatutako ereduen zerrenda batekin alderatzen baitu "kasu" eragilean oinarrituta. C, Java eta JavaScript-en eskuragarri dagoen "switch" operadoreak ez bezala, "match" oinarritutako esamoldeek askoz gehiago eskaintzen dute funtzionaltasun zabala. Kontuan izan da proposatutako operadoreek kodearen irakurgarritasuna hobetuko dutela, Python objektu arbitrarioen konparaketa eta arazketa sinplifikatu eta kodearen fidagarritasuna areagotuko dutela hedatzeko aukerari esker. mota estatikoen egiaztapena.

def http_error(egoera):
Partiduen egoera:
400 kasua:
itzuli "Eskaera txarra"
401|403|404 kasua:
itzuli "Ez dago onartzen"
418 kasua:
itzuli "teontzi bat naiz"
kasua_:
itzuli "Beste zerbait"

Esate baterako, objektuak, tuplak, zerrendak eta sekuentzia arbitrarioak deskonprimi ditzakezu aldagaiak dauden balioetan oinarrituta lotzeko. Txantiloi habiaratuak definitzea, txantiloian "baldin" baldintza osagarriak erabiltzea, maskarak erabiltzea ("[x, y, *atseden]"), gako/balioen mapak (adibidez, {"bandwidth": b, "latency") ”: l} "banda-zabalera" eta "latentzia" balioak eta hiztegia ateratzeko), azpitxantiloiak atera (":=" operadorea), erabili izendun konstanteak txantiloian. Klaseetan, posible da bat etortzeko portaera pertsonalizatzea “__match__()” metodoa erabiliz.

from dataclasses inportatu dataclass

@dataclass
class Puntua:
x:int
y:int

def whereis(puntua):
partida puntua:
kasu Puntua (0, 0):
inprimatu ("Jatorria")
kasua Puntua(0, y):
inprimatu(f"Y={y}")
kasu Puntua (x, 0):
inprimatu(f"X={x}")
kasu Puntua():
inprimatu ("Beste nonbait")
kasua_:
inprimatu ("Ez da puntu bat")

partida puntua:
kasua Puntua (x, y) x == y bada:
inprimatu(f"Y=X at {x}")
kasua Puntua (x, y):
inprimatu(f"Ez diagonalean")

GORRIA, BERDEA, URDINA = 0, 1, 2
lotu kolorea:
kasua .GORRIA:
inprimatu ("gorria ikusten dut!")
kasua .BERDEA:
print("Belarra berdea da")
kasua .BLU
E:
inprimatu(“Burdina sentitzen dut :(“)

Sorta bat prestatu da berrikusteko adabakiak esperimentalarekin ezarpena proposatutako zehaztapena, baina azken bertsioa oraindik dago eztabaidatu. Adibidez eskaini Balio lehenetsirako "case _:" adierazpenaren ordez, erabili "bestela:" edo "lehenetsia:" gako-hitza, beste testuinguru batzuetan "_" aldi baterako aldagai gisa erabiltzen baita. Era berean, zalantzazkoa da barne-antolaketa, "if ... elif ... bestela" konstruktuetarako erabiltzen denaren antzekoa den esamolde berriak itzultzean oinarritzen dena, konparazio multzo oso handiak prozesatzen direnean nahi den errendimendua emango ez duena.

Iturria: opennet.ru

Gehitu iruzkin berria