0Pricing
Python Academy · レッスン

matchとcaseの基礎

値のパターンに基づいて分岐します

「matchとcaseの基礎」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

構造化パターンマッチング

Python 3.10では、match文による構造化パターンマッチングが導入されました。値を一連のパターンと比較し、最初に一致したパターンを実行します。連続したif/elifよりもはるかに強力です。

基本構文

対象の値に続けてmatchを書き、その後に1つ以上のcaseブロックを記述します。最初に一致したcaseが実行されます。

command = 'start'

match command:
    case 'start':
        print('Starting up')
    case 'stop':
        print('Shutting down')

# prints: Starting up

リテラルとのマッチング

最も単純なパターンは、数値、文字列、True、False、Noneなどのリテラル値です。対象の値がリテラルと等しいときに一致します。

code = 404

match code:
    case 200:
        print('OK')
    case 404:
        print('Not Found')
    case 500:
        print('Server Error')

ワイルドカード _

アンダースコア_は、あらゆるものに一致するワイルドカードパターンです。elseのようなデフォルトの包括処理として、最後に置きます。

code = 418

match code:
    case 200:
        print('OK')
    case _:
        print('Unknown status')

ORによる組み合わせ

caseの中で|演算子を使うと、複数のパターンのいずれかに一致させられます。

code = 301

match code:
    case 200 | 201 | 204:
        print('Success')
    case 301 | 302:
        print('Redirect')
    case _:
        print('Other')

値のキャプチャ

パターン内の単独の名前は、対象の値をその変数にキャプチャします。すべてに一致するパターンでマッチさせた後も値を使いたい場合に使用します。

value = 42

match value:
    case 0:
        print('zero')
    case other:
        print('got', other)

順序が重要

caseは上から下へテストされ、最初に一致したものが採用されます。広範囲に値をキャプチャするパターンを早い位置に置くと、後続のより具体的なcaseが隠れてしまいます。

x = 5

match x:
    case n:           # matches everything first!
        print('caught by capture')
    case 5:
        print('this never runs')

matchは何も返さない

matchは式ではなく文なので、値を返しません。結果が必要な場合は、caseの中で変数に値を設定します。

day = 6
label = ''

match day:
    case 0 | 6:
        label = 'weekend'
    case _:
        label = 'weekday'

print(label)

Noneとのマッチング

Noneには直接マッチさせられます。条件分岐の連鎖の中で明示的にis Noneを確認するよりもすっきり書けます。

def describe(value):
    match value:
        case None:
            return 'nothing'
        case _:
            return 'something: ' + str(value)

print(describe(None))
print(describe(7))

実用的なディスパッチャー

パターンマッチングはコマンドディスパッチャーとして特に効果を発揮し、長いifの連鎖をわかりやすいcaseの一覧に変えられます。

def handle(cmd):
    match cmd:
        case 'help':
            return 'Showing help'
        case 'quit' | 'exit':
            return 'Goodbye'
        case _:
            return 'Unknown command'

print(handle('exit'))
print(handle('foo'))

True、False、Noneとのマッチング

定数True、False、Noneは、等価性ではなく同一性によってマッチします。そのため、分岐の対象として信頼できるシングルトンになります。

def report(flag):
    match flag:
        case True:
            return 'enabled'
        case False:
            return 'disabled'
        case None:
            return 'unset'

print(report(True))
print(report(None))

確認問題

match文でワイルドカードパターン_は何をしますか?

まとめ

値のパターンに基づいて分岐する方法を学びました。

  • matchはcaseを上から下へテストし、最初に一致したものを実行します。
  • リテラルにマッチさせ、_を包括処理に使い、|で組み合わせます。
  • 単独の名前は値をキャプチャします。
  • matchは式ではなく文です。

よくある質問

「matchとcaseの基礎」レッスンは無料ですか?

はい。「matchとcaseの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「matchとcaseの基礎」で何を学びますか?

値のパターンに基づいて分岐します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「matchとcaseの基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. matchとcaseの基礎
  2. シーケンスとマッピングのマッチング
  3. クラスパターン
  4. ガードとワイルドカード
← Python Academyに戻る