Guido van Rossum は、パターン マッチング演算子を Python に追加することを提案しました

グイド・ファン・ロッサム 紹介された コミュニティレビューの草案 仕様書 Pythonでパターンマッチング演算子(matchとcase)を実装する。パターンマッチング演算子を追加する提案は2001年と2006年にすでに発表されていたことに注意する必要がある(ペップ-0275, ペップ-3103) ですが、一致するチェーンをコンパイルするための「if ... elif ... else」構造の最適化を支持して拒否されました。

新しい実装は、Scala、Rust、F#が提供するmatch演算子に非常に似ています。match演算子は、指定された式の結果を、大文字小文字のブロックに列挙されたパターンのリストと比較します。C、Java、JavaScriptで利用可能なswitch演算子とは異なり、match演算子はより多くの機能を提供します。 幅広い機能提案された演算子は、コードの可読性を向上させ、任意のPythonオブジェクトの比較とデバッグを簡素化し、拡張された演算子の可能性によりコードの信頼性も向上させると指摘されています。 静的型チェック.

def http_error(ステータス):
試合ステータス:
ケース400:
「不正なリクエスト」を返す
ケース 401|403|404:
「許可されていません」を返す
ケース418:
返す「私はティーポットです」
場合_:
「何か別のこと」を返す

たとえば、オブジェクト、タプル、リスト、および任意のシーケンスを解凍して、既存の値に基づいて変数をバインドできます。 ネストされたテンプレートの定義、テンプレート内での追加の「if」条件の使用、マスク (「[x, y, *rest]」)、キーと値のマッピング (例: {"bandwidth": b、"latency") の使用が許可されます。 ”: l} を使用して「帯域幅」と「遅延」の値と辞書を抽出します)、サブテンプレートを抽出します(「:= 演算子」)、テンプレートで名前付き定数を使用します。 クラスでは、「__match__()」メソッドを使用してマッチング動作をカスタマイズできます。

データクラスからデータクラスをインポート

@データクラス
クラスポイント:
x:int
y:int

def whereis(ポイント):
マッチポイント:
ケースポイント(0, 0):
print("原点")
ケースポイント(0, y):
print(f"Y={y}")
ケースポイント(x, 0):
print(f"X={x}")
ケースポイント():
print("どこか別の場所")
場合_:
print("点ではありません")

マッチポイント:
case Point(x, y) x == y の場合:
print(f"Y=X at {x}")
点(x, y)の場合:
print(f"対角線上にない")

赤、緑、青 = 0、1、2
一致する色:
ケースのRED:
print("赤が見えます!")
ケースのグリーン:
print("草は緑です")
ケースのBLU
E:
print(“ブルースを感じています:(“)

レビュー用にセットが用意されました パッチ 実験的 実装 仕様案はあるが、最終バージョンはまだ 議論されている。 例えば、 提供された デフォルト値の「case _:」式の代わりに、「else:」または「default:」キーワードを使用してください。「_」は他のコンテキストでは一時変数として使用されるためです。また、「if ... elif ... else」構文で使用されるものと同様に、新しい式をバイトコードに変換することに基づく内部構成は問題を引き起こし、非常に大規模な比較セットを処理する際に望ましいパフォーマンスが得られません。

出所: オープンネット.ru

DDoS 保護機能を備えた信頼性の高いサイト用ホスティング、VPS VDS サーバーを購入する 🔥 DDoS攻撃対策付きの信頼性の高いウェブサイトホスティング、VPS/VDSサーバーを購入しましょう | ProHoster