Table of Contents
🧠Motivation
Python gibt’s inzwischen seit über 30 Jahren – eine echte Veteranin unter den Programmiersprachen. Und ganz ehrlich: Bisher hatte ich nie das Gefühl, dass mir ein bestimmtes Sprachfeature gefehlt hätte. Alles irgendwie machbar.
Aber dann kam Python 3.10 mit einer interessanten Neuerung um die Ecke: match
–case
, also eine Art switch-case
, wie man’s aus anderen Sprachen kennt – aber auf Python-Art natürlich, mit mehr Wumms.
🧱 Klassisch: if
–elif
–else
Der Standard-Weg, Entscheidungen zu treffen, ist klar: if
–elif
–else
. Nehmen wir mal ein Beispiel aus der Praxis:
Du bekommst einen Steuerschlüssel und sollst den in einen kompakten Suffix umwandeln – etwa _9
fĂĽr 19%
, _7
fĂĽr 7%
, um ihn dann an einen Kostenträger dranzuhängen:
def convert_tax_code(tax_code, cost_carrier):
if tax_code == "19%":
cost_carrier += "_9"
elif tax_code == "7%":
cost_carrier += "_7"
else:
print("Error: unknown tax code")
return cost_carrier
So weit, so simpel. Aber dann will der Kunde auch "19"
und "7"
(ohne %
) unterstĂĽtzt haben:
def convert_tax_code(tax_code, cost_carrier):
if tax_code == "19%" or tax_code == "19":
cost_carrier += "_9"
elif tax_code == "7%" or tax_code == "7":
cost_carrier += "_7"
else:
print("Error: unknown tax code")
return cost_carrier
Und es hört natürlich nicht auf – jetzt sollen auch "0,19"
und "0,07"
funktionieren:
def convert_tax_code(tax_code, cost_carrier):
if tax_code == "19%" or tax_code == "19" or tax_code == "0,19":
cost_carrier += "_9"
elif tax_code == "7%" or tax_code == "7" or tax_code == "0,07":
cost_carrier += "_7"
else:
print("Error: unknown tax code")
return cost_carrier
Und ja, das funktioniert – aber der Code wird langsam ziemlich unleserlich. Die Bedingung wird länger, tax_code
wiederholt sich ständig, und elegant ist was anderes.
Spätestens hier wäre für mich der Punkt erreicht, nach einer besseren Lösung zu suchen:
🗂️ Alternative: Dictionary als Lookup
Eine super Alternative fĂĽr solche Mappings: ein Dictionary.
TAX_CODE_DICT = {
"19%": "_9",
"19": "_9",
"0,19": "_9",
"7%": "_7",
"7": "_7",
"0,07": "_7",
}
def convert_tax_code_dict(tax_code, cost_carrier):
if tax_code in TAX_CODE_DICT:
cost_carrier += TAX_CODE_DICT[tax_code]
else:
print("Error: unknown tax code")
return cost_carrier
Das sieht schon viel sauberer aus. Aber: Es bringt ein paar (kleine) Nachteile mit sich:
- Kohäsion – Das Dictionary lebt außerhalb der Funktion. Muss man mögen.
- Fehlerbehandlung – Der
else
-Zweig bleibt, um ungĂĽltige Eingaben abzufangen.
🎯 Endlich: match case
Jetzt kommt Python 3.10 ins Spiel – und mit ihm match case
. Das liest sich nicht nur gut, es lässt sich auch gut gruppieren und ist super erweiterbar:
def convert_tax_code_match_case(cost_carrier, tax_code):
match tax_code:
case "19%" | "19" | "0,19":
cost_carrier += "_9"
case "7%" | "7" | "0,07":
cost_carrier += "_7"
case _:
print("Error: unknown tax code")
return cost_carrier
Nice! Keine unnötige Wiederholung, alle verwandten Werte sind gruppiert, und das Ganze liest sich wie ein klar strukturierter Entscheidungsbaum.
âś… Fazit
Mit match case
bekommst du eine moderne, saubere Alternative zum klassischen if
-Konstrukt, ohne gleich auf externe Strukturen wie Dictionaries ausweichen zu mĂĽssen.
Vor allem bei vielen, strukturierten Bedingungen kann das eine Erleichterung sein.