Guido van Rossum
Naujasis diegimas labai panašus į „match“ operatorių, pateiktą „Scala“, „Rust“ ir „F#“, kuris lygina nurodytos išraiškos rezultatą su šablonų sąrašu, pateiktu blokais pagal „case“ operatorių. Skirtingai nuo C, Java ir JavaScript operatoriaus „switch“, „match“ pagrįstos išraiškos siūlo daug daugiau
def http_error(status):
rungtynių būsena:
400 atvejis:
grąžinti „Bloga užklausa“
atvejis 401|403|404:
grąžinti „Neleidžiama“
418 atvejis:
grąžinti "aš arbatinukas"
case_:
grąžinti "kažkas kita"
Pavyzdžiui, galite išpakuoti objektus, eilutes, sąrašus ir savavališkas sekas, kad susietumėte kintamuosius pagal esamas reikšmes. Leidžiama apibrėžti įdėtus šablonus, šablone naudoti papildomas „if“ sąlygas, naudoti kaukes („[x, y, *rest]“), rakto/reikšmių susiejimą (pvz., {"bandwidth": b, "latency" ”: l}, norėdami išgauti „pralaidumo“ ir „latencijos“ reikšmes ir žodyną, išskleisti antrinius šablonus („:=“ operatorius), šablone naudokite pavadintas konstantas. Klasėse galima pritaikyti atitikimo elgesį naudojant „__match__()“ metodą.
iš duomenų klasių importuoti duomenų klasę
@dataclass
klasės taškas:
x:int
y:int
def whereis (taškas):
rungtynių taškas:
Atvejo taškas (0, 0):
spausdinti („Kilmė“)
atvejo taškas (0, y):
spausdinti (f"Y={y}")
Atvejo taškas (x, 0):
spausdinti (f"X={x}")
atvejo taškas ():
spausdinti („Kažkur kitur“)
case_:
print ("Ne taškas")
rungtynių taškas:
atvejis Taškas(x, y), jei x == y:
print (f"Y=X at {x}")
atvejo taškas (x, y):
print (f "Ne įstrižainėje")
RAUDONA, ŽALIA, MĖLYNA = 0, 1, 2
atitikimo spalva:
dėklas .RED:
spausdinti ("Aš matau raudoną!")
dėklas .GREEN:
spausdinti („Žolė žalia“)
dėklas .BLU
E:
print("Aš jaučiu bliuzą :(")
Paruoštas rinkinys peržiūrai
Šaltinis: opennet.ru