Гидо ван Россум Python'го үлгүгө дал келген операторлорду кошууну сунуштады

Гидо ван Россум берилген коомдук кароо үчүн долбоор мүнөздөмөлөрү Pythonдо үлгү дал келүүчү операторлорду (мат жана регистр) ишке ашыруу үчүн. Белгилей кетсек, үлгү дал келүүчү операторлорду кошуу боюнча сунуштар буга чейин 2001 жана 2006-жылдары жарыяланган (pep-0275, pep-3103), бирок дал келген чынжырларды түзүү үчүн “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

Комментарий кошуу