「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python での構造パターン マッチング

Python での構造パターン マッチング

2024 年 11 月 9 日に公開
ブラウズ:740

Structural pattern matching in Python

構造パターン マッチングは、複雑なデータの構造に基づいて意思決定を行い、そこから必要な値を抽出できる Python の強力な機能です。これにより、条件付きロジックを表現するための簡潔かつ宣言的な方法が提供され、コードの可読性と保守性が大幅に向上します。この記事では、Python で構造パターン マッチングを使用する実際のケーススタディの例をいくつか見ていきます。

1. API レスポンスを解析中
構造パターン マッチングの一般的な使用例の 1 つは、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」キーを持つ辞書と一致し、そのキー内で「温度」値と一致し、それを変数 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.ユーザー入力を検証しています
構造パターン マッチングは、ユーザー入力の検証にも役立ちます。 Web サイトのサインアップ フォームを作成していて、ユーザーの電子メールの形式が正しいことと、パスワードが特定の要件を満たしていることを確認したいとします。次のようにパターン マッチングを使用してこれらの検証を実行できます:

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.関数を動的にディスパッチする
構造パターン マッチングのもう 1 つの興味深い使用例は、入力パラメーターに基づいて関数を動的にディスパッチすることです。ユーザーが演算と 2 つの数値を入力すると、プログラムがそれらの計算を実行する電卓プログラムを使用していると想像してください。次のように、パターン マッチングを使用して、指定された操作に基づいて正しい関数を実行できます。

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に再現されています。侵害がある場合は、[email protected]に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3