Guido van Rossum komunitatearen azterketarako zirriborroa Python-en ereduak bat etortzeko operadoreak (match eta case) ezartzeko. Kontuan izan behar da ereduak bat etortzeko operadoreak gehitzeko proposamenak 2001ean eta 2006an argitaratu zirela (, ), baina baztertu egin ziren "if ... elif ... else" eraikuntza optimizatzearen alde, bat datozen kateak eraikitzeko.
Inplementazio berria Scala, Rust eta F#-n ematen den "match" operadorearen oso antzekoa da, zeinak adierazpen zehatz baten emaitza kasuetan oinarritutako blokeetan zehaztutako ereduen zerrenda batekin alderatzen duen. C, Java eta JavaScript-en eskuragarri dagoen "switch" operadorearen aldean, "match" oinarritutako adierazpenek askoz gehiago eskaintzen dute. Adierazi da proposatutako operadoreek kodearen irakurgarritasuna hobetuko dutela, Python objektu arbitrarioen alderaketa eta arazketa erraztuko dituztela, eta kodearen fidagarritasuna ere handituko dutela luzapen-aukera dela eta. .
def http_errorea(egoera):
partidaren egoera:
400 kasua:
itzuli "Eskaera okerra"
401|403|404 kasua:
itzuli "Ez da onartzen"
418 kasua:
itzuli "Teontzi bat naiz"
kasua _:
itzuli "Beste zerbait"
Adibidez, objektuak, tuplak, zerrendak eta sekuentzia arbitrarioak deskonprimitu daitezke balioetan oinarritutako aldagaiak lotzeko. Txantiloi txertatuak definitzea, txantiloi batean "baldintza gehigarriak erabiltzea, maskarak aplikatzea ("[x, y, *rest]"), gako/balio bikoteak mapatzea (adibidez, {"bandwidth": b, "latency": l} "bandwidth" eta "latency" balioak eta hiztegi bat ateratzeko), azpitxantiloiak ateratzea (":=" eragilea) eta txantiloi batean izendatutako konstanteak erabiltzea posible da. Bat etortze-portaera klaseetan pertsonaliza daiteke "__match__()" metodoa erabiliz.
datu-klaseetatik datu-klasea inportatu
@datuklasea
klaseko puntua:
x: int
y: int
def non(puntua):
partida puntua:
kasua Point(0, 0):
inprimatu("Jatorria")
kasua Point(0, y):
inprimatu(f»Y={y}»)
kasu Point(x, 0):
inprimatu(f»X={x}»)
kasu puntua():
inprimatu ("Beste nonbait")
kasua _:
inprimatu("Ez da puntu bat ere")
partida puntua:
kasua Point(x, y) baldin x == y bada:
inprimatu(f»Y=X {x}-n»)
kasu Point(x, y):
inprimatu(f"Ez diagonalean")
GORRIA, BERDEA, URDINA = 0, 1, 2
kolorea bat etortzea:
kasua .RED:
inprimatu("Gorria ikusten dut!")
kasua .BERDEA:
inprimatu("Belarra berdea da")
kasua .BLU
E:
inprimatu("Tristea sentitzen ari naiz :(")
Material sorta bat prestatu da berrikusteko. esperimentalarekin. proposatutako zehaztapena, baina azken bertsioa oraindik . Adibidez Balio lehenetsiaren ordez, erabili "else:" edo "default:" gako-hitza, "_" beste testuinguru batzuetan aldi baterako aldagai gisa erabiltzen baita. Barne-antolaketak, adierazpen berriak "if...elif...else" konstruktuetarako erabiltzen denaren antzeko bytecode bihurtzean oinarrituta, galderak ere sortzen ditu, eta horrek ez du nahi den errendimendua emango konparazio multzo oso handiak prozesatzean.
Iturria: opennet.ru
