Guido van Rossum yhteisön harkintaan tarkoitettu luonnos toteuttaa kuvioiden yhteensovitusoperaattorit (match ja case) Pythonissa. On huomattava, että ehdotuksia kuvioiden yhteensovitusoperaattoreiden lisäämiseksi julkaistiin jo vuosina 2001 ja 2006 (, ), mutta ne hylättiin ja niiden sijaan optimoitiin "if ... elif ... else" -rakenne vastaavien ketjujen rakentamiseksi.
Uusi toteutus on hyvin samankaltainen kuin Scalassa, Rustissa ja F#:ssa käytetty "match"-operaattori, joka vertaa määritetyn lausekkeen tulosta tapauskohtaisissa lohkoissa määritettyyn malliluetteloon. Toisin kuin C:ssä, Javassa ja JavaScriptissä käytetty "switch"-operaattori, "match"-pohjaiset lausekkeet tarjoavat paljon enemmän... On huomattava, että ehdotetut operaattorit parantavat koodin luettavuutta, yksinkertaistavat mielivaltaisten Python-objektien vertailua ja virheenkorjausta sekä lisäävät koodin luotettavuutta laajennetun mahdollisuuden ansiosta. .
def http_error(tila):
ottelun tilanne:
tapaus 400:
palauttaa "Virheellinen pyyntö"
tapaus 401|403|404:
palauta "Ei sallittu"
tapaus 418:
palauta "Olen teekannu"
tapaus _:
palauta "Jotain muuta"
Esimerkiksi on mahdollista purkaa objekteja, tupleja, listoja ja mielivaltaisia sekvenssejä sitoakseen muuttujia olemassa olevien arvojen perusteella. On mahdollista määritellä sisäkkäisiä malleja, käyttää mallissa lisää "if"-ehtoja, käyttää maskeja ("[x, y, *rest]"), yhdistää avain/arvo-pareja (esim. {"bandwidth": b, "latency": l} "bandwidth"- ja "latency"-arvojen ja sanakirjan poimimiseksi), poimia alimalleja (":="-operaattori) ja käyttää nimettyjä vakioita mallissa. Vastaavuuskäyttäytymistä voidaan mukauttaa luokissa käyttämällä "__match__()"-metodia.
tietoluokista tuo tietoluokka
@dataluokka
luokkapiste:
x: kokonaisluku
y: kokonaisluku
def whereis(piste):
ottelupallo:
tapaus Piste(0, 0):
print("Alkuperä")
tapaus Piste(0, y):
tulosta(f»Y={y}»)
tapaus Piste(x, 0):
tulosta(f»X={x}»)
tapauskohta():
tulosta("Jossain muualla")
tapaus _:
print("Ei pistettä")
ottelupallo:
tapaus Piste(x, y), jos x == y:
tulosta(f»Y=X kohdassa {x}»)
tapaus Piste(x, y):
print(f"Ei lävistäjällä")
PUNAINEN, VIHREÄ, SININEN = 0, 1, 2
ottelun väri:
tapaus .PUNAINEN:
tulosta("Näen punaista!")
tapaus .VIHREÄ:
tulosta("Ruoho on vihreää")
tapaus .BLU
E:
tulosta(“Tunnen oloni alakuloiseksi :(“)
Arviointia varten on valmisteltu materiaalikokonaisuus. kokeellisen ehdotettu eritelmä, mutta lopullinen versio on vielä . Esimerkiksi Oletusarvon "case _:" -lausekkeen sijaan käytä avainsanaa "else:" tai "default:", koska "_":tä käytetään väliaikaisena muuttujana muissa yhteyksissä. Sisäinen organisaatio, joka perustuu uusien lausekkeiden kääntämiseen tavukoodiksi, joka on samanlainen kuin "if...elif...else"-rakenteissa käytetty, herättää myös kysymyksiä, sillä se ei tarjoa haluttua suorituskykyä käsiteltäessä erittäin suuria vertailujoukkoja.
Lähde: opennet.ru
