用語比較
match文とif-elif-elseの違い|同じ値を複数の定数と比べるときの使い分け(Python3基礎)
match文とif文の違いは、分岐の条件の書き方です。if文は分岐ごとに条件式を書き、match文は1つの式を受け取って、case のパターンと順に比べます。
Python3基礎試験では、条件式を並べるならif、同じ値をパターンと比べるならmatchと覚えると、判断しやすくなります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
if文とmatch文の要点
if文
分岐ごとに条件式を書く。公式チュートリアル4.1は、他の言語の switch 文や case 文の代用になると説明している。
match文
1つの式の値を case のパターンと順に比べる。最初にマッチしたブロックだけが実行される。
違いを表で確認
| 比較軸 | if文 | match文 |
|---|---|---|
| 分岐の書き方 | if・elif のあとに、分岐ごとの条件式を書く | match のあとに比べる式を1つ書き、case のあとにパターンを書く |
| どれにも当てはまらないとき | else 部を付けると、そこが実行される。付けなければ何も実行されない | case _ がワイルドカードとして必ずマッチする。どの case にもマッチしなければ、どの分岐も実行されない |
| 複数の値をまとめるとき | 条件式を組み合わせて書く | case 401 | 403 | 404: のように、| で複数のリテラルを1つのパターンにできる |
| 値の取り出し | 取り出す処理は、分岐の中で別に書く | case (0, y): のように、タプルの要素などを変数に取り込める。アンパック代入に似た書き方 |
| チュートリアルが示す向き | 条件式を並べる一般的な分岐 | 同じ値を複数の定数と比較する場合や、特定の型や属性を確認する場合 |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
ステータスコードごとにメッセージを返す関数を読んでいる人
同じ値 status を 400・404・418 と順に比べる形は、チュートリアル4.7の例そのものです。match status: と case の並びで読みます。
case _ が何のためにあるのか分からない人
if-elif の最後の else と同じ位置づけで、どの case にもマッチしなかったときの受け皿です。チュートリアルは _ をマッチに絶対失敗しないワイルドカードと説明しています。
if x < 0 のような大小の判定を match で書けるのか気になる人
チュートリアル4.1の例は x < 0 や x == 0 を if と elif で並べています。値の範囲を比べる分岐は、if-elif-else の書き方で読みます。
具体例で使い分ける
例 1
チュートリアル4.7の http_error(status) を読む
def http_error(status): の中で match status: を使い、case 400 は "Bad request"、case 404 は "Not found"、case 418 は "I'm a teapot"、最後の case _ は "Something's wrong with the internet" を返します。
- status が 404 のとき、上から順にパターンと比べ、case 404 に最初にマッチして "Not found" を返します。最初にマッチしたブロックだけが実行されます。
- status が 500 のとき、400・404・418 のどれにもマッチしません。最後の case _ はマッチに絶対失敗しないので、"Something's wrong with the internet" を返します。
- 同じ処理を if-elif-else で書くと、if status == 400: に続けて elif status == 404: と elif status == 418: を並べ、最後を else: にします。case _ は、else に相当する受け皿として読めます。
結論: 同じ変数を定数と順に比べる分岐は、matchなら比べる式を1回だけ書けば足ります。最後の case _ は、else と同じ受け皿として読みます。
例 2
チュートリアル4.7の座標の例を読む
point は (x, y) のタプルです。match point: に続けて case (0, 0): は "原点" を出力し、case (0, y): と case (x, 0): は、0 でない側の値を変数に取り込んで出力します。
- case (0, y): は、1つ目の要素が 0 のタプルにマッチし、2つ目の要素を y に結びつけます。チュートリアルは、これをアンパック代入に似た形と説明しています。
- if-elif で同じことを書くと、point[0] == 0 のような条件を並べたうえで、y に値を代入する行が別に必要になります。
結論: 値の形を調べながら、同時に要素を取り出したいときは、matchのパターンが向いています。
問題文から答えを選ぶ手順
- 1
比べる対象が1つの式かを見る
同じ変数や式を、定数やパターンと順に比べているなら、matchで書ける形です。
- 2
条件の中身を見る
x < 0 のような大小の判定や、複数の変数を組み合わせた条件は、if-elif-else の書き方で読みます。
- 3
どれにも当てはまらない場合を見る
最後が case _ なら else と同じ受け皿です。無ければ、どの分岐も実行されないことがあります。
試験での見分け方
- 1同じ値を複数の定数と比較する場合や、特定の型や属性を確認する場合は、match文も便利(公式チュートリアル4.1)。
- 2match文は、最初にマッチしたパターンのブロックだけを実行する。
- 3case _ はマッチに絶対失敗しないワイルドカードで、if-elif-else の else に近い位置づけ。
- 4case 401 | 403 | 404: のように、| で複数のリテラルを1つのパターンにできる。
誤答しやすい選択肢
case _ を書かなくても、必ず何かが実行されると考える
修正: チュートリアルは、どの case にもマッチしなければ、どの分岐も実行されないと説明しています。
case の中の名前を、比べる定数だと考える
修正: case (0, y): の y は比べる値ではなく、要素を取り込む変数です。0 は値として比べられます。
複数のcaseに当てはまるとき、全部実行されると考える
修正: 最初にマッチしたパターンのブロックだけが実行されます。
確認問題
Q1match status: に case 400、case 404、case _ が続くとき、status が 500 の場合にマッチするのは?
答え: case _
case _ はワイルドカードで、マッチに絶対失敗しません。400・404 にマッチしなかった値の受け皿になります。
Q2case 401 | 403 | 404: の | は何を表すか?
答え: 複数のリテラルを1つのパターンにまとめる "or"
チュートリアル4.7が示す書き方で、401・403・404 のどれかにマッチします。
Q3match文で、どの case にもマッチしなかった場合はどうなるか?
答え: どの分岐も実行されない
case _ のようなワイルドカードを置かなければ、何も実行されずに match 文が終わります。
Q4チュートリアル4.1が、match文も便利としている場面は?
答え: 同じ値を複数の定数と比較する場合や、特定の型や属性を確認する場合
if ... elif ... elif ... が switch 文や case 文の代用になると述べたうえで、あわせて示されている記述です。
到達チェック
- match文が、1つの式を case のパターンと順に比べることを説明できる
- case _ が、if-elif-else の else に近い受け皿であることを説明できる
- どの case にもマッチしないとき、どの分岐も実行されないことを説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- all()とany()の違い|すべて真か、1つでも真か、空のときの結果(Python3基礎)
all()とany()の違いを、真になる条件、空のイテラブルを渡したときの結果、途中で判定が止まる動き、条件式との組み合わせ方で解説。Python3エンジニア認定基礎試験の確認問題つきです。
- timeitとprofileの違い|小さなコード片の比較か、ボトルネックの特定か(Python3基礎)
timeitモジュールとprofile・pstatsモジュールの違いを、計測する単位と目的で整理します。Python公式チュートリアル10.10の記述、タプルの入れ替えの計測例、確認問題つき。
- dictのkeys()・values()・items()の違い|キーだけ、値だけ、キーと値の組を取り出す(Python3基礎)
dictのkeys()・values()・items()の違いを、取り出すもの、for文での受け取り方、辞書を変更したときの見え方、リストとの違いで解説。Python3エンジニア認定基礎試験の第5章(辞書)の確認問題つきです。
よくある質問
Qmatch文とif文はどちらを使えばよいですか?
公式チュートリアル4.1は、同じ値を複数の定数と比較する場合や、特定の型や属性を確認する場合には、match文も便利と述べています。大小の比較などは、if-elif-else で書きます。
Qmatch文はswitch文と同じですか?
公式チュートリアル4.7は、表面的にはC・Java・JavaScriptなどの switch 文に似ているが、RustやHaskellなどのパターンマッチングにより近いと説明しています。値から要素を取り出して変数に入れられる点が違います。
Qcase _ は必ず書く必要がありますか?
必須ではありません。書かない場合、どの case にもマッチしなければ、どの分岐も実行されません。
Qmatch文はPython3基礎試験の出題範囲に含まれますか?
公式の出題範囲は公式チュートリアルの章単位で、4.7「match文」は制御構造ツールの章に含まれます。出題の形式は受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
