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

Guido van Rossum aurkeztu komunitatearen azterketarako zirriborroa zehaztapenak 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 (pep-0275, pep-3103), 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. funtzionalitate zabala.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. mota estatikoen egiaztapena.

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. adabakiak esperimentalarekin. ezarpena proposatutako zehaztapena, baina azken bertsioa oraindik eztabaidatu. Adibidez eskaini 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

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak 🔥 Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster