Guido van Rossum predložio je dodavanje operatora za podudaranje uzoraka u Python

Guido van Rossum podnijeti nacrt za reviziju zajednice tehnički podaci za implementaciju operatora podudaranja uzoraka (podudaranje i mala i mala slova) u Pythonu. Treba napomenuti da su prijedlozi za dodavanje operatora za podudaranje uzorka već objavljeni 2001. i 2006. (pep-0275, pep-3103), ali su odbijeni u korist optimizacije konstrukcije "if ... elif ... else" za sastavljanje podudarnih lanaca.

Nova implementacija umnogome je slična "match" operatoru danom u Scali, Rustu i F#, koji uspoređuje rezultat određenog izraza s popisom uzoraka navedenih u blokovima na temelju "case" operatora. Za razliku od operatora "switch" dostupnog u C-u, Javi i JavaScriptu, izrazi temeljeni na "podudaranju" nude mnogo više široka funkcionalnost. Napominje se da će predloženi operatori poboljšati čitljivost koda, pojednostaviti usporedbu proizvoljnih Python objekata i otklanjanje pogrešaka te također povećati pouzdanost koda zahvaljujući mogućnosti proširenog statička provjera tipa.

def http_greška(status):
status podudaranja:
slučaj 400:
vrati "Loš zahtjev"
slučaj 401|403|404:
vrati "Nije dopušteno"
slučaj 418:
vrati "Ja sam čajnik"
slučaj_:
vrati "Nešto drugo"

Na primjer, možete raspakirati objekte, torke, popise i proizvoljne nizove za vezanje varijabli na temelju postojećih vrijednosti. Dopušteno je definirati ugniježđene predloške, koristiti dodatne "if" uvjete u predlošku, koristiti maske ("[x, y, *rest]"), mapiranja ključ/vrijednost (na primjer, {"bandwidth": b, "latency ”: l} za izdvajanje vrijednosti i rječnika "propusnost" i "latencija", izdvajanje podpredložaka (":=" operator), korištenje imenovanih konstanti u predlošku. U razredima je moguće prilagoditi ponašanje podudaranja pomoću metode “__match__()”.

iz klasa podataka uvoz klase podataka

@dataclass
klasa bodova:
x:int
y:int

def gdje je (točka):
meč lopta:
case Point(0, 0):
ispis("Porijeklo")
case Point(0, y):
ispis(f"Y={y}")
case Point(x, 0):
ispis(f"X={x}")
case Point():
print("Negdje drugdje")
slučaj_:
print("Nije točka")

meč lopta:
case Point(x, y) if x == y:
print(f"Y=X na {x}")
Case Point(x, y):
print(f"Ne na dijagonali")

CRVENA, ZELENA, PLAVA = 0, 1, 2
odgovara boji:
slučaj .CRVENO:
print("Vidim crveno!")
slučaj .ZELENO:
print("Trava je zelena")
slučaj .BLU
E:
print(“Osjećam blues :(“)

Pripremljen je set za recenziju zakrpe s eksperimentalnim provedbu predložena specifikacija, ali konačna verzija je još uvijek raspravljali, Na primjer ponudio Umjesto izraza "case _:" za zadanu vrijednost, koristite ključnu riječ "else:" ili "default:", jer se "_" u drugim kontekstima koristi kao privremena varijabla. Također je upitna interna organizacija, koja se temelji na prevođenju novih izraza u bajt kod sličan onom koji se koristi za konstrukcije "if ... elif ... else", što neće pružiti željenu izvedbu pri obradi vrlo velikih skupova usporedbi.

Izvor: opennet.ru

Dodajte komentar