Programiranje

Python lahko dobi sintakso ujemanja vzorcev

Ustvarjalci jezika Python premišljujejo o novem predlogu, PEP 622, ki bi končno prinesel sintakso stavka, ki ustreza Pythonu. Novi stavki za ujemanje vzorcev bi programerjem Pythona omogočili bolj izrazite načine ravnanja s strukturiranimi podatki, ne da bi se morali zateči k rešitvam.

Ujemanje vzorcev je pogosta značilnost mnogih programskih jezikov, kot je stikalo / ohišje v C. Omogoča izvedbo enega od številnih možnih ukrepov na podlagi vrednosti dane spremenljivke ali izraza. Medtem ko Pythonu primanjkuje izvorne sintakse za ujemanje vzorcev, jo je bilo mogoče posnematiče / elif / else verige ali iskanje po slovarju.

PEP 622 predlaga metodo za ujemanje izraza s številnimi vrstami vzorcev z uporabo ujemanje / primer sintaksa:

ujema se z nečim: primer 0 | 1 | 2: tiskan ("majhno število") primer [] | [_]: print ("Kratko zaporedje") primer str () | bytes (): print ("Nekaj ​​podobnega nizu") case _: print ("Nekaj ​​drugega")

Podprte vrste ujemanja vzorcev vključujejo literale, imena, konstantne vrednosti, zaporedja, preslikavo (v bistvu prisotnost para ključ-vrednost v izrazu), razred, mešanico zgoraj navedenega ali katerega koli od teh ter pogojne izraze. Vsa dvoumna ali nemogoča razrešitve bodo med izvajanjem povzročila izjemo.

Predmeti lahko obvladujejo teste ujemanja z novim protokolom, imenovanim __match__ protokola. Če objekt izvaja __match__ metodo lahko uporabite za preizkus, ali se ujema z danim vzorcem razreda, in vrnitev ustreznega odziva.

PEP 622 bi omogočil tudi preverjanje statičnega tipa, da je mogoče preveriti ujemanja. Novo @ zapečateno dekorater za razred označuje preverjalnikom tipov, da je kateri koli podrazred zadevnega razreda definiran v istem modulu kot osnovni razred.

Prejšnja PEP za dodajanje ujemanja vzorcev - PEP 275 in PEP 3103, predlagana v letih 2001 in 2006 - sta bila zavrnjena zaradi pomanjkanja splošne podpore. PEP 3103 je pripravil ustvarjalec Pythona Guido van Rossum. Namen novega PEP, ki ga je napisal van Rossum in več drugih, je zagotoviti regularne izraze za ujemanje predmetov in ne le preprost če / elif / else nadomestek. Avtorji ugotavljajo, da je veliko vidikov tega PEP navdihnilo, kako deluje ujemanje vzorcev v Rustu in Scali.

Kako bi vse to izvedli pod pokrovom, je še vedno v razpravi. Izvedba, predlagana v PEP 622, bi ustvarila enaka zaporedja bajt kod kot če / elif / else veriga. Večji stikalo / ohišje bloki lahko postanejo manj zmogljivi, odvisno od tega, koliko pogojne logike je bilo vključeno v vsakega Ovitek. Toda PEP jasno kaže, da je še vedno na voljo poljubno število pristopov in optimizacij uspešnosti (npr. Memoizacija).

Tudi če bo PEP na koncu sprejet, bi se lahko veliko spremenilo. Eno vprašanje, ki bo verjetno izpodbijano, je uporaba Ovitek _: namesto sicer: kot končna klavzula za vsestikalo izjavo._ se v mnogih okoliščinah uporablja kot začasna spremenljivka in bi enostransko preglasitev njegovega vedenja lahko pomenila odmik za razvijalce.

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