Guido van Rossum ehdotti mallinsovitusoperaattorien lisäämistä Pythoniin

Guido van Rossum toimitettu yhteisön harkintaan tarkoitettu luonnos tekniset tiedot toteuttaa kuvioiden yhteensovitusoperaattorit (match ja case) Pythonissa. On huomattava, että ehdotuksia kuvioiden yhteensovitusoperaattoreiden lisäämiseksi julkaistiin jo vuosina 2001 ja 2006 (pep-0275, pep-3103), 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... laaja toiminnallisuusOn huomattava, että ehdotetut operaattorit parantavat koodin luettavuutta, yksinkertaistavat mielivaltaisten Python-objektien vertailua ja virheenkorjausta sekä lisäävät koodin luotettavuutta laajennetun mahdollisuuden ansiosta. staattinen tyyppitarkistus.

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. laastareita kokeellisen toteutus ehdotettu eritelmä, mutta lopullinen versio on vielä keskusteltu. Esimerkiksi tarjottu 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

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster