Programmering

Python kan få mønstermatchende syntaks

Skaperne av Python-språket overveier et nytt forslag, PEP 622, som til slutt vil bringe en mønstermatchende uttalelsessyntaks til Python. De nye uttalelsene om mønstermatching vil gi Python-programmerere mer uttrykksfulle måter å håndtere strukturerte data på, uten å måtte ty til løsninger.

Mønstermatching er et vanlig trekk ved mange programmeringsspråk, for eksempel bryter / koffert i C. Det gjør det mulig å utføre en av en rekke mulige handlinger basert på verdien av en gitt variabel eller et gitt uttrykk. Mens Python manglet en innfødt syntaks for mønstermatching, har det vært mulig å etterligne den medhvis / elif / annet kjeder eller et ordbokoppslag.

PEP 622 foreslår en metode for å matche et uttrykk mot en rekke slags mønstre ved bruk av a kamp / sak syntaks:

matche noe: sak 0 | 1 | 2: utskrift ("Lite antall") sak [] | [_]: print ("A short sequence") case str () | bytes (): print ("Something string-like") case _: print ("Noe annet")

Støttede mønsterkamptyper inkluderer bokstaver, navn, konstante verdier, sekvenser, en kartlegging (i utgangspunktet tilstedeværelsen av et nøkkelverdipar i uttrykket), en klasse, en blanding av ovennevnte eller noen av disse pluss betingede uttrykk. Eventuelle kamper som er tvetydige eller umulige å løse, kaster et unntak under kjøretiden.

Objekter kan håndtere samsvarstester ved hjelp av en ny protokoll kalt __kamp__ protokoll. Hvis et objekt implementerer __kamp__ metode, kan den brukes til å teste om den samsvarer med et gitt klassemønster og gi et passende svar.

PEP 622 vil også tillate statiske typekontrollere å kontrollere at fyrstikker kan verifiseres. En ny @ forseglet dekoratør for en klasse indikerer for å skrive brikker at enhver underklasse for den aktuelle klassen er definert i samme modul som basisklassen.

Tidligere PEPer for å legge til mønstermatching - PEP 275 og PEP 3103, foreslått i henholdsvis 2001 og 2006 - ble avslått på grunn av mangel på populær støtte. PEP 3103 ble utarbeidet av Python-skaperen Guido van Rossum. Den nye PEP, forfattet av van Rossum og flere andre, har som mål å gi regelmessige uttrykk for objektmatching, i stedet for bare en enkel hvis / elif / annet erstatning. Forfatterne bemerker at mange aspekter av denne PEP ble inspirert av hvordan mønstermatching fungerer i Rust og Scala.

Hvordan alt dette vil bli implementert under panseret, er fremdeles til diskusjon. Implementeringen foreslått i PEP 622 vil generere de samme bytekodesekvensene som en hvis / elif / annet kjede. Større bryter / koffert blokker kan bli mindre effektive, avhengig av hvor mye betinget logikk som er inkludert i hver sak. Men PEP gjør det klart at et hvilket som helst antall tilnærminger og ytelsesoptimaliseringer (f.eks. Memoisering) fremdeles er på bordet.

Selv om PEP ender med å bli akseptert, kan mye om det endres. Et spørsmål som sannsynligvis vil bli utfordret er bruken av sak _: i stedet for ellers: som en siste fangst-klausul forbytte om uttalelse._ brukes som en midlertidig variabel i mange sammenhenger, og å overstyre dens oppførsel ensidig kan være en avstengning for utviklere.

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