Python 3.10 での「match...case」の使用

WBOY
リリース: 2023-04-12 09:25:13
転載
1968 人が閲覧しました

Python 3.10 での「match...case」の使用

「match...case」構文は、他のオブジェクト指向言語の switch ステートメントに似ており、構造と case の一致を容易にするように設計されています。

始めましょう。

構文

「match...case」構文は次のとおりです。

def greeting(message):
match message.split():
case ["hello"]:
print("this message says hello")
case ["hello", name]:
print("This message is a personal greeting to {name}")
case _:
print("The message didn’t match with anything")
ログイン後にコピー

構文を見てみましょう。それがどのように機能するか。

私たちが作成した関数は、message という名前のパラメーターを受け入れます。 match キーワードは、リストされたケースを比較するためのオブジェクトを受け入れます。

この例では、match キーワードは、message.split() 操作の結果である文字列のリストを受け取ります。さらに詳しく説明するために、次のように関数を呼び出すとします。

greeting("hello")
ログイン後にコピー

関数は、まずこの文字列をすべてのスペースに分割し、リストを形成します。上記の入力の場合、一致演算子は ["hello"] リストを使用します。次に、リストと各ケースを比較します。最初のケースは次のとおりです:

case ["hello"]
ログイン後にコピー

入力はこれに正確に一致するため、この場合でもコードは実行を続けます。

出力:

this message says hello
ログイン後にコピー

この関数をgreeting("hello George")のように呼び出すとどうなるでしょうか?

この入力では、一致演算子は ["hello", "George"] リストを使用してすべてのケースを比較します。最初のケース、ケース "hello" は、比較リストに 1 つではなく 2 つの要素があるため、一致しません。

構造マッチング

マッチング演算子は指定された式の構造と一致するため、式がリストと比較されたとしても、ケース式の長さにより最初のケースは一致しません。の最初の要素と一致します。

2 番目のケースは ["hello", name] です。入力が一致すると、これが起こります。一致するリテラル値を Python に提供しない場合、Python は比較式の値を case 式の変数名にバインドします。したがって、この例では、名前は George に設定されます。このケースは一致します (最初の要素として「hello」があり、name にバインドされている要素もあります)。そのため、出力は次のようになります:

This message is a personal greeting to George
ログイン後にコピー

次に、次のように関数を呼び出してみましょう。挨拶(「こんにちは、ジョージ・ジョンソン」)。

比較式は ["hello", "George", "Johnson"] になります。では、それぞれのケースを見てみましょう。最初のケースは、比較式に 1 つではなく 3 つの要素があるため失敗します。 2 番目のケースも同様に失敗します。2 番目のケースでは、最初の要素が「hello」である長さ 2 のリストが表示されることが期待されます。実際には最初の要素は「hello」ですが、比較式には要素が 3 つあるため、このケースは一致しません。

残る唯一のオプションはアンダースコアの大文字と小文字です。これは、すべてに一致するデフォルトの大文字と小文字です。これは、switch ステートメントのデフォルトのケースのように考えてください。比較式が他に一致しない場合は、常に _ ケースに一致します。

最後のケースとして下線を付ける すべてのケースが下線のケースと一致するため、このケースではケースは実行されません。これは、if...else の else キーワードに似ています。 Python は _ を有効な変数名として認識するため、_ case はすべてに一致します。したがって、case ["hello", name] と一致する場合と同様に、比較式は _ name にバインドされます。私たちの特定のケースでは、_ 変数は値 ["hello"、"George"、"Johnson"] を保持します。

したがって、最新の関数呼び出しgreeting("hello George Johnson")の出力は次のようになります:

The message didn’t match with anything
ログイン後にコピー

高度な使用法

"match...case" 構文は次のとおりです。これは、さまざまな式や値を比較するために使用できる非常に強力なツールです。上の例のようにリストを比較すると、より多くの一致する特徴が利用可能になります。

case 式では、演算子を使用して残りのすべての要素を変数に入れることができます。例:

comparison_list = ["one", "two", "three"]
match comparison_list:
case [first]:
print("this is the first element: {first}")
case [first, *rest]:
print("This is the first: {first}, and this is the rest: {rest}")
case _:
print("Nothing was matched")
ログイン後にコピー

このスニペットでは、2 番目のケースが照合され、次のような出力で実行されます:

This is the first: one, and this is the rest: ["two", "three"]
ログイン後にコピー

次のように 2 つ以上の構造からのケース分岐を結合することも可能です。 :

match comparisonList:
 case [first] | [first, "two", "seven"]:
 print("this is the first element: {first}")
 case [title, "hello"] | ["hello", title]:
 print("Welcome esteemed guest {title}")
 case [first, *rest]:
 print("This is the first: {first}, and this is the rest: {rest}")
 case _:
 print("Nothing was matched")
ログイン後にコピー

最初と 2 番目のケースは、ケース分岐を実行するために比較式を当てはめることができるいくつかの異なる式で構成されています。これにより、ブランチを組み合わせる際にある程度の柔軟性が得られます。

また、辞書の「match...case」構文も紹介します。 match 演算子は、比較式に case 式の属性が含まれているかどうかをチェックします。例:

comparisonDictionary = {
 "John": "boy",
 "Jack": "boy",
 "Jill": "girl",
 "Taylor": "girl"
}
match comparisonDictionary:
 case {"John": "boy", "Taylor": "boy"}:
 print("John and Taylor are both boys")
 case {"John": "boy", "Taylor": "girl"}:
 print("Taylor is a girl and John is a boy")
 case _:
 print("Nothing matches")
ログイン後にコピー

出力:

Taylor is a girl and John is a boy
ログイン後にコピー

match 演算子は、case 属性が入力辞書に存在するかどうかを確認し、値が一致するかどうかを確認します。

要約すると、新しい「match...case」演算子は、Python 開発者が分岐ケースを作成するときに利用できる強力なツールです。これを使用すると、受信変数の構造を確実にチェックし、変数に存在しないものにアクセスしようとしていないことを確認できます。

重要 辞書照合では、入力辞書に大文字と小文字が指定するよりも多くの属性がある場合でも、大文字と小文字は一致します。

要約すると、新しい「match...case」演算子は、Python 開発者が分岐ケースを作成するときに利用できる強力なツールです。これを使用すると、受信変数の構造を確実にチェックし、変数に存在しないものへのアクセスが試行されないようにすることができます。

以上がPython 3.10 での「match...case」の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート