開発者の皆さん、こんにちは。今日は、Python の新しくてエキサイティングな機能の 1 つである構造パターン マッチングについて詳しく説明します。 Python 3.10 で導入されたこの機能は、複雑なデータ構造を操作する強力かつ表現力豊かな方法をもたらします。それがどのように機能するのか、そしてプロジェクトでどのように使用できるのかを見てみましょう。
構造パターン マッチングは、データ構造を検査し、その形状と内容に基づいてコードを実行する方法です。これは他の言語の switch ステートメントに似ていますが、より強力です。パターンマッチングを使用すると、次のことが可能になります。
これが実際にどのように機能するかをいくつかの例で見てみましょう。
パターン マッチングの基本構文では、match キーワードと case キーワードを使用します。
def describe_type(data): match data: case int(): return "It's an integer" case str(): return "It's a string" case list(): return "It's a list" case _: return "It's something else" print(describe_type(42)) # Output: It's an integer print(describe_type("Hello")) # Output: It's a string print(describe_type([1, 2, 3])) # Output: It's a list print(describe_type({1, 2, 3})) # Output: It's something else
この例では、さまざまなタイプと照合しています。最後のケースの _ は、何にでも一致するワイルドカードです。
パターン マッチングの最も強力な側面の 1 つは、複雑なデータ構造を構造化できることです。
def process_user(user): match user: case {"name": str(name), "age": int(age)} if age >= 18: return f"{name} is an adult" case {"name": str(name), "age": int(age)}: return f"{name} is a minor" case _: return "Invalid user data" print(process_user({"name": "Alice", "age": 30})) # Output: Alice is an adult print(process_user({"name": "Bob", "age": 15})) # Output: Bob is a minor print(process_user({"name": "Charlie"})) # Output: Invalid user data
ここでは、辞書を構造化し、その過程で変数をバインドしています。また、ケースに追加の条件を追加するためにガード (年齢 >= 18 の場合) も使用しています。
| を使用できます。単一のケースで複数のパターンを指定する演算子:
def classify_number(num): match num: case 0 | 1 | 2: return "Small number" case int(x) if x > 1000: return "Big number" case int(): return "Medium number" case _: return "Not a number" print(classify_number(1)) # Output: Small number print(classify_number(500)) # Output: Medium number print(classify_number(1001)) # Output: Big number print(classify_number("hello")) # Output: Not a number
パターン マッチングは、リストやタプルなどのシーケンスを操作する場合に特に便利です。
def analyze_sequence(seq): match seq: case []: return "Empty sequence" case [x]: return f"Single-element sequence: {x}" case [x, y]: return f"Two-element sequence: {x} and {y}" case [x, *rest]: return f"Sequence starting with {x}, followed by {len(rest)} more elements" print(analyze_sequence([])) # Output: Empty sequence print(analyze_sequence([1])) # Output: Single-element sequence: 1 print(analyze_sequence([1, 2])) # Output: Two-element sequence: 1 and 2 print(analyze_sequence([1, 2, 3, 4])) # Output: Sequence starting with 1, followed by 3 more elements
この例では、異なる長さのシーケンスと照合する方法と、* 演算子を使用して残りの要素をキャプチャする方法を示します。
構造パターン マッチングは、特に複雑なデータ構造を扱う場合に、コードをより読みやすく表現力豊かにする強力な機能です。これは、次のようなシナリオで特に役立ちます。
次はあなたの番です!プロジェクトで構造パターン マッチングをどのように使用しましたか (またはどのように使用する予定ですか)?以下のコメント欄であなたの経験やアイデアを共有してください。この機能の特に賢い使い方を見つけましたか?直面した課題はありますか?話し合いましょう!
パターン マッチングは Python ではまだ比較的新しい機能であるため、プロジェクトで使用する前に必ず Python バージョン (3.10 ) を確認してください。コーディングを楽しんでください!
以上が言語機能の詳細: Python の構造パターン マッチングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。