Гуидо ван Росум
Новата реализация е много подобна на оператора „съвпадение“, предоставен в Scala, Rust и F#, който сравнява резултата от определен израз със списък от модели, изброени в блокове, базирани на оператора „case“. За разлика от оператора "switch", наличен в C, Java и JavaScript, базираните на "match" изрази предлагат много повече
def http_error(статус):
състояние на съответствието:
случай 400:
върне "Грешна заявка"
случай 401|403|404:
върнете „Не е позволено“
случай 418:
връщане "Аз съм чайник"
case_:
върнете "Нещо друго"
Например, можете да разопаковате обекти, кортежи, списъци и произволни последователности, за да обвържете променливи въз основа на съществуващи стойности. Разрешено е да се дефинират вложени шаблони, да се използват допълнителни условия „if“ в шаблона, да се използват маски („[x, y, *rest]“), съпоставяне на ключ/стойност (например {„bandwidth“: b, „latency“ ”: l} за извличане на стойности и речник на „честотна лента“ и „закъснение“, извличане на подшаблони (оператор „:="), използване на именувани константи в шаблона. В класовете е възможно да персонализирате поведението на съвпадение с помощта на метода „__match__()“.
от класове данни импортиране на клас данни
@dataclass
клас точка:
x: int
y: int
def whereis(точка):
мач точка:
case Point(0, 0):
печат ("Произход")
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:
print(f"Y=X при {x}")
case Point(x, y):
print(f"Не по диагонала")
ЧЕРВЕНО, ЗЕЛЕНО, СИНЬО = 0, 1, 2
съответстващ цвят:
случай .RED:
print("Виждам червено!")
случай .ЗЕЛЕНО:
print("Тревата е зелена")
случай .BLU
E:
print(“Усещам блуса :(“)
Подготвен е комплект за преглед
Източник: opennet.ru