AI資格ドリル
資格を選ぶ

用語比較

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

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

ステータスコードごとにメッセージを返す関数を読んでいる人

同じ値 status を 400・404・418 と順に比べる形は、チュートリアル4.7の例そのものです。match status: と case の並びで読みます。

02

case _ が何のためにあるのか分からない人

if-elif の最後の else と同じ位置づけで、どの case にもマッチしなかったときの受け皿です。チュートリアルは _ をマッチに絶対失敗しないワイルドカードと説明しています。

03

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

    比べる対象が1つの式かを見る

    同じ変数や式を、定数やパターンと順に比べているなら、matchで書ける形です。

  2. 2

    条件の中身を見る

    x < 0 のような大小の判定や、複数の変数を組み合わせた条件は、if-elif-else の書き方で読みます。

  3. 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 にもマッチしないとき、どの分岐も実行されないことを説明できる

同じ資格で次に知りたいこと

よくある質問

Qmatch文とif文はどちらを使えばよいですか?

A

公式チュートリアル4.1は、同じ値を複数の定数と比較する場合や、特定の型や属性を確認する場合には、match文も便利と述べています。大小の比較などは、if-elif-else で書きます。

Qmatch文はswitch文と同じですか?

A

公式チュートリアル4.7は、表面的にはC・Java・JavaScriptなどの switch 文に似ているが、RustやHaskellなどのパターンマッチングにより近いと説明しています。値から要素を取り出して変数に入れられる点が違います。

Qcase _ は必ず書く必要がありますか?

A

必須ではありません。書かない場合、どの case にもマッチしなければ、どの分岐も実行されません。

Qmatch文はPython3基礎試験の出題範囲に含まれますか?

A

公式の出題範囲は公式チュートリアルの章単位で、4.7「match文」は制御構造ツールの章に含まれます。出題の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)