Python match-Anweisung

Python3 条件控制Python3 Bedingte Steuerung


matchist eine in Python 3.10 eingeführte Anweisung für strukturelles Pattern-Matching, ähnlich wie in anderen Sprachenswitch-case, aber mächtiger.

Die match-Anweisung kann Muster in Datenstrukturen abgleichen; nicht nur konstante Werte, sondern auch komplexe Muster wie Typen, Sequenzen, Dictionaries.

Wortbedeutung: matchBedeutet "to match", wird für Pattern-Matching verwendet.


Grundlegende Syntax und Parameter

Die match-Anweisung ist eine neue Funktion in Python 3.10+, die komplexe mehrzweigige if-elif-Strukturen ersetzen soll.

Syntaxformat

match 变量:
    case 模式1:
        代码块1
    case 模式2:
        代码块2
    case _:
        默认代码块

Pattern-Typen

  • Konstantes Muster: stimmt mit einem bestimmten Wert überein.
  • Wildcard-Muster: case _Entspricht jedem Wert, äquivalent zu default.
  • Typmuster: entspricht Datentypen.
  • Sequenzmuster: entspricht Sequenzen wie Listen, Tupeln.
  • Dictionary-Muster: entspricht Dictionaries.
  • Muster mit Bedingungen: verwendeifum zusätzliche Bedingungen hinzuzufügen.

Beispiele

Beispiel 1: Grundlegende Verwendung (ähnlich wie switch)

Beispiel

# Python-Versionsanforderung 3.10+
def http_status(status):
    match status:
        case 200:
            return "OK"
        case 404:
            return "Not Found"
        case 500:
            return "Server Error"
        case _:
            return "Unknown"

print(http_status(200))   # Ausgabe: OK
print(http_status(404))   # Ausgabe: Not Found
print(http_status(999))   # Ausgabe: Unknown

Erwartete Ausgabe:

OK
Not Found
Unknown

Codeanalyse:

  1. case _ist ein Platzhalter, der alle nicht übereinstimmenden Fälle abgleicht.
  2. Ähnlich wie default in switch-case.

Beispiel 2: Abgleich mehrerer Werte

Beispiel

# Mehrere Werte führen zum selben Ergebnis
def color_name(code):
    match code:
        case "r" | "R":
            return "red"
        case "g" | "G":
            return "green"
        case "b" | "B":
            return "blue"
        case _:
            return "unknown"

print(color_name("r"))  # Ausgabe: red
print(color_name("G"))  # Ausgabe: green
print(color_name("x"))  # Ausgabe: unknown
[/mycode]</div>
</div>

<p><strong>Erwartete Ausgabe:</strong></p>
<pre>red
⟦0⟧
unknown
</pre>
<p>Mit<code>|</code>können mehrere Werte im selben Fall kombiniert werden.</p>
<h3>Beispiel3: Sequenzmusterabgleich</h3>

<div class="example">
<h2 class="example">Beispiel</h2>
<div class="example_code">[mycode4 type="python"]
# Sequenzmusterabgleich
def describe_point(point):
    match point:
        case (0, 0):
            return "Ursprung"
        case (x, 0):
            return f"Punkt auf der X-Achse ({x}, 0)"
        case (0, y):
            return f"Punkt auf der Y-Achse (0, {y})"
        case (x, y):
            return f"Punkt in der Ebene ({x}, {y})"
        case _:
            return "ungültige Koordinaten"

print(describe_point((0, 0)))      # Ausgabe: Ursprung
print(describe_point((5, 0)))      # Ausgabe: Punkt auf der X-Achse (5, 0)
print(describe_point((3, 4)))      # Ausgabe: Punkt in der Ebene (3, 4)

Erwartete Ausgabe:

原点
X轴上的点 (5, 0)
平面上的点 (3, 4)

match kann Tupel/Listen destrukturieren und Werte daraus extrahieren.

Beispiel 4: Musterabgleich für Dictionaries

Beispiel

# Musterabgleich für Dictionaries
def process_user(user):
    match user:
        case {"name": name, "age": age}:
            return f"User: {name}, Age: {age}"
        case {"name": name}:
            return f"User: {name}"
        case _:
            return "invalid user"

print(process_user({"name": "Tom", "age": 20}))
print(process_user({"name": "Jerry"}))
print(process_user({"role": "admin"}))

Erwartete Ausgabe:

User: Tom, 年龄: 20
User: Jerry
无效用户

Dictionary-Muster können Werte bestimmter Schlüssel extrahieren.

Beispiel 5: Muster mit Bedingungen

Beispiel

# Musterabgleich mit Bedingungen
def classify_number(n):
    match n:
        case n if n > 0:
            return f"positive Zahl ({n})"
        case n if n < 0:
            return f"negative Zahl ({n})"
        case 0:
            return "Null"

print(classify_number(10))   # Ausgabe: positive Zahl (10)
print(classify_number(-5))    # Ausgabe: negative Zahl (-5)
print(classify_number(0))     # Ausgabe: Null

# Komplexe Bedingungen
def describe_list(lst):
    match lst:
        case []:
            return "leere Liste"
        case [x]:
            return f"einzelnes Element: {x}"
        case [x, y]:
            return f"zwei Elemente: {x}, {y}"
        case [x, *rest]:
            return f"erstes: {x}, Rest: {rest}"

print(describe_list([]))
print(describe_list([1]))
print(describe_list([1, 2, 3, 4]))

Erwartete Ausgabe:

正数 (10)
负数 (-5)
零
空列表
单个元素: 1
第一个: 1, 其余: [2, 3, 4]

Verwendungcase 变量 if 条件kann zusätzliche Übereinstimmungsbedingungen hinzufügen.


Python3 条件控制Python3 Bedingte Steuerung

Andere Erweiterungen