match-case【match文】3.10
メモ ( 概要 ソフトキーワード ) 構文 ( 各種パターン ) 例
メモ
概要
〔 例 〕- C言語系の switch 文の拡張
- 整数値だけでなく、各種型と比較可能
- 複数パターン(or)の指定可 (case の連続相当)
- break 等はなし (後のパターンの処理はなし)
- default: 相当は、case _: (アンダースコア)
- 他言語のパターンマッチング文相当
- 各種パターンと比較可能
- キャプチャが可能 (キャプチャ パターン)
ソフトキーワード
〔 例 〕- match と case は、ソフトキーワード
- match-case として使用される場合のみキーワード、その他では自由に使用可
- ワイルドカード パターン での _ (アンダースコア)もソフトキーワード
関連
外部リンク
構文
match マッチ対象式:
case パターン1 [if ガード条件1]:処理1 (1行)
処理1 (複数行可)
・・・
case パターンn [if ガード条件n]:処理n (1行)
処理n (複数行可)
[case _:default 処理 (1行)
default 処理 (複数行可)]
マッチ対象式マッチ対象
カンマ区切り:tuple【タプル型】となるので、パターンnも合わせる
パターンn各種パターン の指定
複数 (OR パターン)サブパターン1|・・・|サブパターンn
(キャプチャ変数:サブパターン内では重複不可・サブパターン間では同じ指定が必要)
キャプチャサブパターンn as キャプチャ名n
ガード条件n
パターンn全体に対する制約
処理n (1行)・処理n (複数行可)
パターンnにマッチする場合の処理、どちらか1つを指定
default 処理 (1行)・default 処理 (複数行可)
どのパターンにもマッチしない場合の処理、どちらか1つを指定 (キャプチャは不可)
※:正式な構文は、The match statement を参照
各種パターン
(サブ)パターンn | 備考 |
---|---|
リテラル パターン〔 例 〕 | |
符号付き数値 | |
複素数 | |
文字列 | f-string【フォーマット済み文字列リテラル】は不可 |
None | |
True False | |
キャプチャ パターン〔 例 〕 | |
変数 (ワイルドカードのみを除く) | 変数に値をバインド |
ワイルドカード パターン〔 例 〕 ( _ はソフトキーワード:パターン内でのみキーワード) | |
_ (アンダースコア) を含むパターン | 該当位置と常にマッチ (参照不可) |
_ (アンダースコア) のみ | 常にマッチ (構文にも記述) (最後にのみ指定可・参照不可) |
値 パターン〔 例 〕 | |
~.name | 名前付き定数 (列挙型等) |
グループ パターン | |
(パターン) | カッコで強調させるだけ |
シーケンス パターン〔 例 〕 | |
(A) [要素 (複数:カンマ区切り)] (B) (要素 (複数:カンマ区切り)) (C) 要素 (カンマ区切り) (タプル:1要素でもカンマが必要) | (A) list【リスト型】 (B) tuple【タプル型】 (C) タプル型のカッコ省略形 要素: *でアンパック相当 (アンパック:各型の詳細参照) | で or 指定可 as でキャプチャ可 |
マッピング パターン〔 例 〕 | |
{キー1:値1, ・・・[, **キャプチャ変数]} | dict【辞書型】 指定キー以外は無視 重複キーはエラー ** で残り部分のキャプチャ可 (最後にのみ指定可 / **_は不可) |
クラス パターン〔 例 〕 | |
クラス名([位置引数 (カンマ区切り)][,][キーワード引数 (カンマ区切り)]) コンストラクタの記述相当 | 型チェック キャプチャ可 __match_args__ 属性 3.10 指定で位置引数が可能 マッピング パターン 内での使用も可 |