Оператор match...case в Python
match...caseОн предоставляет более мощный метод сопоставления с образцом.
Сопоставление с образцом — это способ обработки структур данных в программировании, делающий код более кратким и читаемым.
match...caseЭто новый синтаксис, представленный в Python 3.10.
match...caseСтруктура синтаксиса выглядит следующим образом:
match expression:
case pattern1:
# 处理pattern1的逻辑
case pattern2 if condition:
# 处理pattern2并且满足condition的逻辑
case _:
# 处理其他情况的逻辑
Описание параметра:
matchПосле инструкции следует выражение, затем используйтеcaseинструкцию для определения различных шаблонов.caseЗа ним следует шаблон, который может быть конкретным значением, переменной, подстановочным знаком и т. д.- Вы можете использовать
ifключевое слово incaseдля добавления условий. _Обычно он используется как подстановочный знак для сопоставления с любым значением.

Пример
1. Сопоставление простых значений
Пример
def match_example(value):
match value:
case 1:
print("Совпало значение 1")
case 2:
print("Совпало значение 2")
case _:
print("Совпали другие значения")
match_example(1) # Вывод: Совпало значение 1
match_example(2) # Вывод: Совпало значение 2
match_example(3) # Вывод: Совпали другие значения
match value:
case 1:
print("Совпало значение 1")
case 2:
print("Совпало значение 2")
case _:
print("Совпали другие значения")
match_example(1) # Вывод: Совпало значение 1
match_example(2) # Вывод: Совпало значение 2
match_example(3) # Вывод: Совпали другие значения
В приведённом выше коде,match— оператор, используемый для сопоставленияvalueс различными случаями, каждыйcaseОператор представляет возможный соответствующий случай,_Подстановочный знак представляет другие случаи.
Результат вывода:
匹配到值为1 匹配到值为2 匹配到其他值
2. Использование переменных
Пример
def match_example(item):
match item:
case (x, y) if x == y:
print(f"Совпал равный кортеж: {item}")
case (x, y):
print(f"Совпал кортеж: {item}")
case _:
print("Совпали другие случаи")
match_example((1, 1)) #Вывод:Совпал равный кортеж: (1, 1)
match_example((1, 2)) #Вывод:Совпал кортеж: (1, 2)
match_example("other") #Вывод:Совпали другие случаи
match item:
case (x, y) if x == y:
print(f"Совпал равный кортеж: {item}")
case (x, y):
print(f"Совпал кортеж: {item}")
case _:
print("Совпали другие случаи")
match_example((1, 1)) #Вывод:Совпал равный кортеж: (1, 1)
match_example((1, 2)) #Вывод:Совпал кортеж: (1, 2)
match_example("other") #Вывод:Совпали другие случаи
Результат вывода:
匹配到相等的元组: (1, 1) 匹配到元组: (1, 2) 匹配到其他情况
3. Сопоставление типов
Пример
class Circle:
def __init__(self, radius):
self.radius = radius
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def match_shape(shape):
match shape:
case Circle(radius=1):
print("Сопоставлен круг с радиусом 1")
case Rectangle(width=1, height=2):
print("Сопоставлен прямоугольник с шириной 1 и высотой 2")
case _:
print("Сопоставлены другие фигуры")
match_shape(Circle(radius=1)) # Вывод: Сопоставлен круг с радиусом 1
match_shape(Rectangle(width=1, height=2)) # Вывод: Сопоставлен прямоугольник с шириной 1 и высотой 2
match_shape("other") # Вывод: Сопоставлены другие фигуры
def __init__(self, radius):
self.radius = radius
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def match_shape(shape):
match shape:
case Circle(radius=1):
print("Сопоставлен круг с радиусом 1")
case Rectangle(width=1, height=2):
print("Сопоставлен прямоугольник с шириной 1 и высотой 2")
case _:
print("Сопоставлены другие фигуры")
match_shape(Circle(radius=1)) # Вывод: Сопоставлен круг с радиусом 1
match_shape(Rectangle(width=1, height=2)) # Вывод: Сопоставлен прямоугольник с шириной 1 и высотой 2
match_shape("other") # Вывод: Сопоставлены другие фигуры
Результат вывода:
匹配到半径为1的圆 匹配到宽度为1,高度为2的矩形 匹配到其他形状Другие расширения
Условное управление в Python3