Ohjelmointi

Python voi saada mallin mukaisen syntaksin

Python-kielen luojat pohtivat uutta ehdotusta PEP 622, joka tuo vihdoin mallin mukaisen lauseen syntaksin Pythoniin. Uudet mallien vastaavuuslausekkeet antaisivat Python-ohjelmoijille ilmaisullisempia tapoja käsitellä jäsenneltyä tietoa tarvitsematta kiertää kiertotapoja.

Kuvion sovitus on yleinen piirre monille ohjelmointikielille, kuten kytkin / kotelo Se sallii yhden monista mahdollisista toimista tietyn muuttujan tai lausekkeen arvon perusteella. Vaikka Pythonilla ei ole ollut alkuperäistä syntaksia kuvien sovittamiseen, sitä on voitu jäljitelläif / elif / else ketjut tai sanakirjahaku.

PEP 622 ehdottaa menetelmää lausekkeen sovittamiseksi monenlaisiin kuvioihin käyttämällä a: ta ottelu / tapaus syntaksi:

vastaamaan jotain: tapaus 0 | 1 | 2: painettu ("pieni määrä") tapaus [] | [_]: tulosta ("Lyhyt jakso") tapaus str () | tavua (): print ("Jotain merkkijonomainen") tapaus _: print ("Jotain muuta")

Tuetut kuvion vastaavuustyypit sisältävät literaalit, nimet, vakioarvot, sekvenssit, kartoituksen (periaatteessa avainarvoparin läsnäolon lausekkeessa), luokan, edellä mainittujen seoksen tai minkä tahansa näistä plus ehdollisista lausekkeista. Kaikki epäselvät tai mahdotonta ratkaista ottelut aiheuttavat poikkeuksen ajon aikana.

Objektit voivat hoitaa ottelutestit uudella protokollalla nimeltä __ottelu__ protokolla. Jos esine toteuttaa __ottelu__ menetelmää, sitä voidaan käyttää testaamaan, vastaako se tiettyä luokkamallia, ja palauttamaan sopivan vastauksen.

PEP 622 antaisi myös staattisen tyypin tarkastajille mahdollisuuden tarkistaa, että osumat voidaan todentaa. Uusi @sealed luokan sisustaja ilmoittaa tyyppitarkistajille, että mikä tahansa kyseisen luokan aliluokka on määritelty samassa moduulissa kuin perusluokka.

Aikaisemmat PEP-mallit, jotka lisäsivät mallien vastaavuutta - PEP 275 ja PEP 3103, joita ehdotettiin vuonna 2001 ja 2006, hylättiin kansan tuen puutteen vuoksi. PEP 3103 -työstön on laatinut Python-luoja Guido van Rossum. Van Rossumin ja useiden muiden kirjoittaman uuden PEP: n tarkoituksena on tarjota säännöllisiä lausekkeita esineiden sovittamiseksi eikä vain yksinkertainen if / elif / else korvike. Kirjoittajat huomauttavat, että monet tämän PEP: n näkökohdat ovat innoittamana siitä, kuinka kuvion sovitus toimii Rustissa ja Scalassa.

Kuinka tämä kaikki toteutettaisiin konepellin alla, on vielä keskusteltavissa. PEP 622: ssa ehdotettu toteutus tuottaisi samat tavukoodisekvenssit kuin if / elif / else ketju. Suurempi kytkin / kotelo lohkoista voisi tulla vähemmän suorituskykyisiä riippuen siitä, kuinka paljon ehdollista logiikkaa sisältyi kuhunkin tapauksessa. Mutta PEP tekee selväksi, että mikä tahansa määrä lähestymistapoja ja suorituskyvyn optimointeja (esim. Muistiinpano) ovat edelleen pöydällä.

Vaikka PEP hyväksytäänkin, paljon siitä saattaa muuttua. Yksi todennäköisesti haastettava asia on tapaus _: sijasta muu: viimeisenä kokonaislausekkeenavaihtaa lausunto._ Sitä käytetään väliaikaisena muuttujana monissa yhteyksissä, ja sen käyttäytymisen ohittaminen yksipuolisesti voi olla kääntäjä kehittäjille.

$config[zx-auto] not found$config[zx-overlay] not found