Elementor Header #8

60. Оператор Match

Добро пожаловать на 60-й урок по Python! Сегодня мы рассмотрим оператор match, который был введен в Python 3.10 и представляет собой мощный инструмент для паттерн-матчинга (или сопоставления с образцом). Оператор match позволяет легко обрабатывать сложные структуры данных и выполнять различные действия на основе их значений.

Что такое оператор match?

Оператор match предназначен для сопоставления значений с различными паттернами. Он позволяет проверять данные и выполнять соответствующий код в зависимости от того, какой паттерн соответствует данным.

Синтаксис

				
					match variable:
    case pattern_1:
        # Код, который выполняется, если variable соответствует pattern_1
    case pattern_2:
        # Код, который выполняется, если variable соответствует pattern_2
    case _:
        # Код, который выполняется, если ни один из предыдущих паттернов не подошел

				
			

Здесь variable — это переменная, которую мы проверяем на соответствие различным паттернам. case pattern указывает паттерн, с которым переменная будет сравниваться. _ (подчеркивание) используется как «заглушка» для любого значения, не подошедшего под предыдущие паттерны.

Примеры использования

1. Простой пример

				
					value = 10

match value:
    case 1:
        print("One")
    case 10:
        print("Ten")
    case 100:
        print("Hundred")
    case _:
        print("Other")

				
			

В этом примере переменная value сопоставляется с различными значениями. Поскольку value равно 10, будет выполнен блок кода case 10.

2. Сопоставление с кортежами

				
					coordinates = (4, 5)

match coordinates:
    case (0, 0):
        print("Origin")
    case (x, 0):
        print(f"On the x-axis at {x}")
    case (0, y):
        print(f"On the y-axis at {y}")
    case (x, y):
        print(f"Point at ({x}, {y})")

				
			

Здесь кортеж coordinates сопоставляется с различными паттернами, чтобы определить его положение на плоскости.

3. Сопоставление с объектами и именованными кортежами

				
					from collections import namedtuple

Person = namedtuple('Person', ['name', 'age'])
person = Person(name='Alice', age=30)

match person:
    case Person(name='Alice', age=age):
        print(f"Alice is {age} years old")
    case Person(name=name, age=age):
        print(f"{name} is {age} years old")
    case _:
        print("Unknown person")

				
			

В этом примере используется именованный кортеж Person для сопоставления значений name и age.

Примеры с шаблонами

Пример 1: Сопоставление с типами данных

				
					def process(value):
    match value:
        case int():
            print("Integer")
        case str():
            print("String")
        case list():
            print("List")
        case _:
            print("Other type")

process(42)         # Ожидаемый вывод: Integer
process("Hello")    # Ожидаемый вывод: String
process([1, 2, 3])  # Ожидаемый вывод: List
process(3.14)       # Ожидаемый вывод: Other type

				
			

Здесь функция process использует match для определения типа данных и выполнения соответствующих действий.

Пример 2: Сопоставление с множественными паттернами

				
					def classify(value):
    match value:
        case 1 | 2 | 3:
            print("Low number")
        case 4 | 5 | 6:
            print("Medium number")
        case 7 | 8 | 9:
            print("High number")
        case _:
            print("Out of range")

classify(3)  # Ожидаемый вывод: Low number
classify(5)  # Ожидаемый вывод: Medium number
classify(9)  # Ожидаемый вывод: High number
classify(10) # Ожидаемый вывод: Out of range

				
			

В этом примере используются операторы | для сопоставления с несколькими паттернами одновременно.

Заключение

Сегодня мы рассмотрели оператор match, который предоставляет мощный и гибкий инструмент для сопоставления значений с различными паттернами. Вы узнали, как использовать match для обработки различных структур данных, включая кортежи, списки, и типы данных.

logo