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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- matchとcaseの基礎
- シーケンスとマッピングのマッチング
- クラスパターン
- ガードとワイルドカード