Гидо ван Россум коомдук кароо үчүн долбоор Pythonдо үлгү дал келүүчү операторлорду (мат жана регистр) ишке ашыруу үчүн. Белгилей кетсек, үлгү дал келүүчү операторлорду кошуу боюнча сунуштар буга чейин 2001 жана 2006-жылдары жарыяланган (, ), бирок дал келген чынжырларды түзүү үчүн “if ... elif ... else” конструкциясын оптималдаштыруунун пайдасына четке кагылды.
Жаңы ишке ашыруу Scala, Rust жана F# тилдеринде берилген "матч" операторуна окшош, ал көрсөтүлгөн туюнтуунун натыйжасын "касе" операторунун негизинде блоктордо саналган үлгүлөрдүн тизмеси менен салыштырат. C, Java жана JavaScript тилдеринде жеткиликтүү "которуу" операторунан айырмаланып, "матчка" негизделген сөз айкаштары көп нерсени сунуштайт. . Сунушталган операторлор коддун окулушун жакшыртат, ыктыярдуу Python объектилерин салыштырууну жана мүчүлүштүктөрдү оңдоону жөнөкөйлөтөт, ошондой эле кеңейтүү мүмкүнчүлүгүнүн эсебинен коддун ишенимдүүлүгүн жогорулатат. .
def http_error(статус):
дал абалы:
учурда 400:
"Жаман суроону" кайтаруу
иши 401|403|404:
"Уруксат берилбейт" кайтаруу
учурда 418:
кайтуу "Мен чайнекмин"
case_:
"Башка бир нерсе" кайтаруу
Мисалы, учурдагы маанилердин негизинде өзгөрмөлөрдү байланыштыруу үчүн объекттерди, кортеждерди, тизмелерди жана ыктыярдуу ырааттуулуктарды таңгактан чыгара аласыз. Уюшкан калыптарды аныктоого, шаблондо кошумча “if” шарттарын колдонууга, маскаларды (“[x, y, *rest]”), ачкыч/маанилердин салыштырмаларын колдонууга уруксат берилет (мисалы, {“өткөөлмөк”: b, “кечүүлөр ”: l} "өткөрүү жөндөмдүүлүгү" жана "кечтирүүнүн" маанилерин жана сөздүктү чыгарып алуу үчүн, субшаблондорду (":=" оператору) чыгарып алыңыз, калыпта аталган константаларды колдонуңуз. Класстарда “__match__()” ыкмасын колдонуу менен дал келген жүрүм-турумду ыңгайлаштырууга болот.
маалымат класстарынан импорттоо классы
@dataclass
класс пункту:
x:int
y:int
def whereis(пункт):
дал келүү пункту:
case Point(0, 0):
print("Түпкү теги")
case Point(0, y):
print(f"Y={y}")
Case Point(x, 0):
басып чыгаруу(f"X={x}")
case Point():
print("Башка жерде")
case_:
print("Учук эмес")
дал келүү пункту:
case Point(x, y) эгерде x == y:
басып чыгаруу(f"Y=X {x}")
Case Point(x, y):
print(f"Диогоналда эмес")
КЫЗЫЛ, ЖАШЫЛ, КӨК = 0, 1, 2
дал түс:
case .RED:
print("Мен кызылды көрүп жатам!")
case .GREEN:
print("Чөп жашыл")
case .BLU
E:
print("Мен блюзду сезип жатам :(")
Карап чыгуу үчүн комплект даярдалды эксперименталдык менен Сунушталган спецификация, бирок акыркы версия дагы эле . Мисалы, Демейки маани үчүн "case _:" туюнтмасынын ордуна "else:" же "default:" ачкыч сөзүн колдонуңуз, анткени башка контексттерде "_" убактылуу өзгөрмө катары колдонулат. Жаңы туюнтмаларды "if ... elif ... else" конструкциялары үчүн колдонулганга окшош байткодго которууга негизделген ички уюм дагы шек туудурат, бул салыштыруунун өтө чоң топтомдорун иштеп чыгууда керектүү өндүрүмдүүлүктү камсыз кылбайт.
Source: opennet.ru
