«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Структурное сопоставление шаблонов в Python

Структурное сопоставление шаблонов в Python

Опубликовано 9 ноября 2024 г.
Просматривать:740

Structural pattern matching in Python

Сопоставление структурных шаблонов — это мощная функция Python, которая позволяет принимать решения на основе структуры сложных данных и извлекать из них нужные значения. Он обеспечивает краткий и декларативный способ выражения условной логики и может значительно улучшить читаемость и удобство обслуживания кода. В этой статье мы рассмотрим несколько реальных примеров использования сопоставления структурных шаблонов в Python.

1. Анализ ответов API
Одним из распространенных вариантов использования структурного сопоставления шаблонов является анализ ответов API. Представьте, что вы работаете с API погоды, который возвращает данные в следующем формате:

{
  "current_weather": {
    "location": "New York",
    "temperature": 25,
    "conditions": "Sunny"
  }
}

Чтобы извлечь температуру из этого ответа, вы можете использовать сопоставление структурных шаблонов следующим образом:

response = {
  "current_weather": {
    "location": "New York",
    "temperature": 25,
    "conditions": "Sunny"
  }
}

match response:
    case {"current_weather": {"temperature": temp}}:
        print(f"The current temperature in {response['current_weather']['location']} is {temp} degrees Celsius.")
    case _:
        print("Invalid response.")

Этот шаблон соответствует любому словарю с ключом «current_weather», внутри этого ключа он соответствует значению «temperature» и извлекает его как переменную temp. Это позволяет вам легко получить доступ к нужным данным без необходимости писать несколько операторов if для проверки существования ключей.

2. Обработка данных
Сопоставление структурных шаблонов также может быть полезно при работе с большими наборами данных. Представьте, что у вас есть набор данных, содержащий информацию о различных продуктах, включая их название, категорию и цену. Вы хотите отфильтровать набор данных, чтобы он включал только продукты ниже определенного ценового порога. Вы можете использовать сопоставление с образцом, чтобы извлечь нужные данные и отфильтровать их следующим образом:

products = [
  {"name": "Smartphone", "category": "Electronics", "price": 500},
  {"name": "T-shirt", "category": "Clothing", "price": 20},
  {"name": "Headphones", "category": "Electronics", "price": 100},
  {"name": "Jeans", "category": "Clothing", "price": 50},
]

match products:
    case [{"category": "Electronics", "price": price} for price in range(200)] as electronics:
        print([product["name"] for product in electronics])
    case [{"category": "Clothing", "price": price} for price in range(40)] as clothing:
        print([product["name"] for product in clothing])
    case _:
        print("No products found.")

В этом примере шаблоны сопоставляются и извлекают значения на основе ограничений категории и цены. Это позволяет использовать более краткий и читаемый подход к фильтрации набора данных.

3. Проверка ввода пользователя
Сопоставление структурных шаблонов также может быть полезно для проверки ввода данных пользователем. Представьте, что вы создаете форму регистрации для веб-сайта и хотите убедиться, что адрес электронной почты пользователя имеет правильный формат и что его пароль соответствует определенным требованиям. Для выполнения этих проверок можно использовать сопоставление с образцом следующим образом:

import re

email = "[email protected]"
password = "12345"

match email:
    case _ if not re.match(r"^\w @[a-zA-Z_] ?\.[a-zA-Z]{2,3}$", email):
        print("Invalid email format.")
    case _ if len(password) 



Этот шаблон сопоставляет и проверяет формат электронной почты с помощью регулярного выражения, а длину пароля — с помощью проверки длины. Этот подход можно легко расширить, включив при необходимости дополнительные проверки.

4. Функции динамической диспетчеризации
Еще один интересный вариант использования сопоставления структурных шаблонов — динамическая диспетчеризация функций на основе входных параметров. Представьте, что вы работаете с программой-калькулятором, в которой пользователь может ввести операцию и два числа, а программа выполнит для них расчет. Вы можете использовать сопоставление с образцом для выполнения правильной функции на основе указанной операции следующим образом:

from operator import add, sub, mul, truediv as div

def calculate(operator, num1, num2):
    match operator:
        case " ":
            return add(num1, num2)
        case "-":
            return sub(num1, num2)
        case "*":
            return mul(num1, num2)
        case "/":
            return div(num1, num2)
        case _:
            print("Invalid operation.")

result = calculate("*", 5, 3)
print(f"The result is: {result}")
# Output: The result is: 15

Этот шаблон соответствует указанному оператору и выполняет соответствующую функцию из модуля оператора. Это обеспечивает компактный и расширяемый подход к обработке различных операций без необходимости писать несколько операторов if.

Заключение
Сопоставление структурных шаблонов — мощная функция Python, позволяющая создавать краткий, декларативный и выборочный код. Его можно использовать в различных сценариях: от анализа ответов API до проверки пользовательского ввода и динамической диспетчеризации функций. Используя структурные шаблоны, вы можете улучшить читаемость и удобство обслуживания вашего кода, а также сделать сложную логику более управляемой.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/myexamcloud/structural-pattern-matching-in-python-3em1?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3