Структурное сопоставление с образцом в Python (введено в версии 3.10) позволяет сравнивать значения с образцами. Ты можешь добавить условия-охранители с помощью предложения if после образца case для применения дополнительной логики фильтрации.
Условие-охранитель размещается после образца с ключевым словом if:
case <pattern> if <condition>:
Блок case выполняется только если оба условия выполнены: образец совпадает и условие-охранитель вычисляется в True.
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
point = Point(3, 5)
match point:
case Point(x, y) if x > 0 and y > 0:
print("First quadrant")
case Point(x, y) if x < 0 and y > 0:
print("Second quadrant")
case Point(x, y) if x == 0 and y == 0:
print("Origin")
case _:
print("Somewhere else")
if x > 0 and y > 0 выполняется только после того, как образец Point(x, y) успешно совпадётx и y), доступны внутри условия-охранителяFalse, Python переходит к следующему case, даже если образец совпалcase _ действует как запасной вариант, аналогично предложению elseif-elseУсловия охраны в структурном сопоставлении образцов оцениваются перед тем, как образец сопоставлен, что позволяет тебе отфильтровать случаи на основе типа входного значения.
Новый — ещё не проверен сообществом
Вы