Гидо ван Россум Python-ға үлгіні сәйкестендіру операторларын қосуды ұсынды

Гидо ван Россум енгізілді қоғамдастық қарауына арналған жоба сипаттамалары Python тілінде үлгіні сәйкестендіру операторларын (сәйкестік және регистр) енгізу үшін. Айта кету керек, үлгіні сәйкестендіру операторларын қосу туралы ұсыныстар 2001 және 2006 жылдары жарияланған (пеп-0275, пеп-3103), бірақ сәйкес тізбектерді құрастыру үшін "if ... elif ... else" құрылымын оңтайландыру пайдасына қабылданбады.

Жаңа іске асыру Scala, Rust және F# нұсқаларында берілген "сәйкестік" операторына ұқсайды, ол көрсетілген өрнектің нәтижесін "жағдай" операторына негізделген блоктарда тізімделген үлгілер тізімімен салыстырады. C, Java және JavaScript тілдерінде қол жетімді «ауыстырып қосу» операторынан айырмашылығы, «сәйкестікке» негізделген өрнектер әлдеқайда көп нәрсені ұсынады. кең функционалдылық. Ұсынылған операторлар кодтың оқылуын жақсартады, еркін Python нысандарын салыстыруды және жөндеуді жеңілдетеді, сонымен қатар кеңейту мүмкіндігінің арқасында кодтың сенімділігін арттырады. статикалық типті тексеру.

def http_қате (күй):
сәйкестік күйі:
іс 400:
«Жаман сұрауды» қайтару
іс 401|403|404:
«Рұқсат етілмейді» қайтару
іс 418:
«Мен шәйнемін» қайтару
жағдай_:
«Басқа бірдеңені» қайтару

Мысалы, бар мәндерге негізделген айнымалы мәндерді байланыстыру үшін нысандарды, кортеждерді, тізімдерді және ерікті реттерді орамнан шығаруға болады. Кірістірілген үлгілерді анықтауға, үлгіде қосымша «егер» шарттарын қолдануға, маскаларды («[x, y, *rest]»), кілт/мәнді салыстыруға (мысалы, {«өткізу жолағы»: b, «кідіріс») рұқсат етіледі. ”: l} «өткізу жолағы» және «кідіріс» мәндерін және сөздікті шығару үшін, ішкі шаблондарды (":=" операторы) шығарып алыңыз, үлгідегі атаулы тұрақтыларды пайдаланыңыз. Сыныптарда «__match__()» әдісі арқылы сәйкес әрекетті теңшеуге болады.

деректер кластарынан деректер класын импорттау

@dataclass
сынып нүктесі:
x:int
y:int

def whereis(нүкте):
сәйкестік нүктесі:
case Point(0, 0):
басып шығару («Түпнұсқа»)
case Point(0, y):
басып шығару(f"Y={y}")
жағдай нүктесі(x, 0):
басып шығару(f"X={x}")
case Point():
басып шығару («Басқа жерде»)
жағдай_:
басып шығару («Нүкте емес»)

сәйкестік нүктесі:
case Point(x, y) егер x == y:
басып шығару(f"Y=X {x}" бойынша)
жағдай нүктесі(x, y):
басып шығару(f"Диагональ бойынша емес")

ҚЫЗЫЛ, ЖАСЫЛ, КӨК = 0, 1, 2
сәйкес түс:
жағдай .ҚЫЗЫЛ:
басып шығару («Мен қызыл түсті көріп тұрмын!»)
жағдай .GREEN:
басып шығару («Шөп жасыл»)
іс .BLU
E:
басып шығару («Мен блюзді сезінемін :(»)

Қарау үшін жиынтық дайындалды патчтар эксперименттік жүзеге асыру ұсынылған спецификация, бірақ соңғы нұсқасы әлі де талқыланды. Мысалы, ұсынылды Әдепкі мән үшін "жағдай _:" өрнегі орнына "else:" немесе "әдепкі:" кілт сөзін пайдаланыңыз, өйткені басқа мәтінмәндерде "_" уақытша айнымалы ретінде пайдаланылады. Сондай-ақ, өте үлкен салыстыру жиындарын өңдеу кезінде қажетті өнімділікті қамтамасыз етпейтін «if ... elif ... else» конструкцияларына ұқсас жаңа өрнектерді байт кодқа аударуға негізделген ішкі ұйым да күмәнді.

Ақпарат көзі: opennet.ru

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster