Гвидо ван Росум је предложио додавање оператора за подударање шаблона у Питхон

Гвидо ван Росум уведен нацрт за ревизију заједнице спецификације за имплементацију оператора подударања шаблона (подударање и велика и мала слова) у Питхон-у. Треба напоменути да су предлози за додавање оператора за подударање шаблона већ објављени 2001. и 2006. (пеп-0275, пеп-3103), али су одбијени у корист оптимизације „иф ... елиф ... елсе“ конструкције за компајлирање одговарајућих ланаца.

Нова имплементација је веома слична оператору "подударања" који се налази у Сцала, Руст и Ф#, који пореди резултат наведеног израза са листом образаца наведених у блоковима на основу оператора "цасе". За разлику од оператора „свитцх“ доступног у Ц, Јава и ЈаваСцрипт-у, изрази засновани на „подударности“ нуде много више широка функционалност. Напомиње се да ће предложени оператори побољшати читљивост кода, поједноставити поређење произвољних Питхон објеката и отклањање грешака, а такође повећати поузданост кода захваљујући могућности проширења статичка провера типа.

деф хттп_еррор(статус):
статус утакмице:
случај 400:
врати "Лош захтев"
случај 401|403|404:
врати "Није дозвољено"
случај 418:
врати "ја сам чајник"
цасе_:
врати "Нешто друго"

На пример, можете распаковати објекте, тупле, листе и произвољне секвенце да бисте повезали променљиве на основу постојећих вредности. Дозвољено је дефинисати угнежђене шаблоне, користити додатне услове „ако“ у шаблону, користити маске („[к, и, *рест]“), мапирања кључ/вредност (на пример, {“пропусност“: б, „латенција ”: л} за издвајање вредности „пропусности” и „латенције” и речника), издвајање подшаблона (оператор „:="), коришћење именованих константи у шаблону. У класама је могуће прилагодити понашање подударања помоћу методе „__матцх__()“.

фром датацласс импорт датацласс

@датацласс
класа Тачка:
к:инт
и:инт

деф вхереис(тачка):
меч поен:
тачка случаја (0, 0):
принт("Порекло")
тачка случаја (0, и):
принт(ф"И={и}")
Тачка случаја (к, 0):
принт(ф"Кс={к}")
тачка случаја ():
принт("Негде другде")
цасе_:
принт("Није тачка")

меч поен:
случај Тачка(к, и) ако је к == и:
принт(ф"И=Кс у {к}")
Тачка случаја (к, и):
принт(ф"Не на дијагонали")

ЦРВЕНА, ЗЕЛЕНА, ПЛАВА = 0, 1, 2
одговара боју:
случај .РЕД:
принт("Видим црвено!")
случај .ЗЕЛЕНИ:
принт("Трава је зелена")
цасе .БЛУ
E:
принт(„Осећам блуз :(“)

Комплет је припремљен за преглед закрпе са експерименталним имплементација предложена спецификација, али коначна верзија је још увек расправљали. На пример, понудио Уместо израза „цасе _:“ за подразумевану вредност, користите кључну реч „елсе:“ или „дефаулт:“, пошто се „_“ у другим контекстима користи као привремена променљива. Такође је упитна унутрашња организација, која се заснива на превођењу нових израза у бајткод сличан оном који се користи за конструкције „иф ... елиф ... елсе“, што неће обезбедити жељене перформансе приликом обраде веома великих скупова поређења.

Извор: опеннет.ру

Додај коментар