Python može dobiti sintaksu koja odgovara uzorku

Stvoritelji jezika Python razmišljaju o novom prijedlogu, PEP 622, koji bi napokon Pythonu donio sintaksu izjave koja odgovara sintaksi. Nove izjave za podudaranje uzorka pružile bi programerima Pythona izražajniji način rukovanja strukturiranim podacima, bez potrebe za zaobilaženjem. 

Usklađivanje uzoraka uobičajena je značajka mnogih programskih jezika, kao što je switch/caseC. U njemu se može poduzeti jedna od niza mogućih radnji na temelju vrijednosti zadane varijable ili izraza. Iako Pythonu nedostaje izvorna sintaksa za podudaranje uzoraka, bilo ga je moguće oponašati  if/elif/elselancima ili pretraživanjem rječnika.

PEP 622 predlaže metodu za podudaranje izraza s nizom uzoraka pomoću match/casesintakse:

podudarati se sa nečim: slučaj 0 | 1 | 2: kutija za ispis ("Mali broj") [] | [_]: print ("Kratki slijed") slučaj str () | bytes (): print ("Nešto nalik nizu") case _: print ("Nešto drugo")

Podržane vrste podudaranja uzorka uključuju literale, imena, konstantne vrijednosti, sekvence, mapiranje (u osnovi prisutnost para ključ / vrijednost u izrazu), klasu, mješavinu gore navedenog ili bilo koji od onih plus uvjetni izrazi. Bilo koja dvosmislena ili nemoguća razrješenja donijet će iznimku u vrijeme izvođenja.

Objekti mogu podnijeti testove podudaranja putem novog protokola koji se naziva __match__protokol. Ako objekt implementira __match__metodu, može se koristiti za testiranje odgovara li zadanom uzorku klase i vratiti odgovarajući odgovor.

PEP 622 također bi omogućio provjeru statičkog tipa da potvrdi da se podudaranja mogu provjeriti. Novi @sealeddekorator za klasu ukazuje na provjeravatelje tipa da je bilo koja podklasa predmetne klase definirana u istom modulu kao i osnovna klasa.

Prethodni PEP-ovi za dodavanje podudaranja uzoraka - PEP 275 i PEP 3103, predloženi 2001. i 2006. godine, odbijeni su zbog nedostatka popularne podrške. PEP 3103 izradio je tvorac Pythona Guido van Rossum. Novi PEP, čiji su autori van Rossum i nekoliko drugih, ima za cilj pružiti regularne izraze za podudaranje objekata, a ne samo jednostavnu if/elif/else zamjenu. Autori primjećuju da su mnogi aspekti ovog PEP-a nadahnuti načinom na koji podudaranje uzoraka djeluje u Rustu i Scali. 

Još će se raspravljati o tome kako bi se sve to moglo provesti ispod haube. Implementacija predložena u PEP 622 generirala bi iste sekvence bajt-koda kao if/elif/elselanac. Veći switch/caseblokovi mogli bi postati manje učinkoviti, ovisno o tome koliko je uvjetne logike bilo uključeno u svaki case. Ali PEP jasno pokazuje da je još uvijek na snazi ​​bilo koji broj pristupa i optimizacija izvedbe (npr. Memoizacija).

Čak i ako PEP na kraju bude prihvaćen, puno bi se toga moglo promijeniti. Jedno od pitanja koje će vjerojatno biti osporavano jest korištenje case _: umjesto else: kao konačne klauzule za  switch izjavu. _ koristi se kao privremena varijabla u mnogim kontekstima, a prevladavanje njezinog jednostranog ponašanja moglo bi biti preokret za programere.