Anzeige
Anzeige
Ratgeber
Artikel merken

Python 3.10: Was ist eigentlich Structural-Pattern-Matching?

Seit Kurzem ist Python in Version 3.10 verfügbar. Mit Structural-Pattern-Matching führt die neue Version ein Feature ein, das sich gerade in der Datenverarbeitung als echter Game-Changer erweisen könnte. Wir geben euch einen Überblick über die Neuerung.

2 Min. Lesezeit
Anzeige
Anzeige

Python-Code. (Foto: Casimiro PT/Shutterstock)

Structural-Pattern-Matching wird unter Pythonistas als vielleicht wichtigste – wenn auch kontroverse – Ergänzung der Sprachsyntax seit async gehandelt. Die mit Python 3.10 eingeführte Neuerung ist das Ergebnis des Versuchs, die aus anderen Programmiersprachen bekannte switch...case-Syntax in Python einzuführen, bietet dabei aber zusätzlich eine Reihe von Möglichkeiten, die über das Vorbild hinausgehen.

Anzeige
Anzeige

Pythons Syntax wurde um die match...case-Struktur erweitert. Wie die Switch/Case-Struktur anderer Sprachen ermöglicht Structural-Pattern-Matching es, eine Variable mit einem Satz möglicher Werte abzugleichen. match...case fungiert in seiner einfachsten Form quasi als Ersatz für eine if-else-Struktur:

http_code = "418"

if http_code == "200":
print("OK")
elif http_code == "404":
print("Not Found")
elif http_code == "418":
print("Dogs are cool")
else:
print("Code not found")
# Dogs are cool

die unter Verwendung des match-Keywords auch so geschrieben werden könnte:

Anzeige
Anzeige

http_code = "418"

match http_code:
case "200":
print("Ok")
case "404":
print("Not Found")
case "418":
print("Dogs are cool")
case _:
print("Code not found")

# Dogs are cool

Die Möglichkeit einer cleaneren Notation ist es allerdings nicht, was das Feature so interessant macht. Structural-Pattern-Matching erlaubt es, die Struktur von Vergleichsobjekten mit einem oder mehreren Mustern abzugleichen. Zur Illustration zeigt das folgende Beispiel den Musterabgleich von zwei Dictionaries. Dictionaries oder Mapping-Strukturen im Allgemeinen sind eine der wichtigsten und gängigsten Datenstrukturen in Python.

Anzeige
Anzeige

Beide Dictionaries haben unterschiedlichen Strukturen:


In [1]:
dict_a = {
'id': 1,
'meta': {
'source': 'x',
'location': 'south'
}
}

und

Anzeige
Anzeige

In [2]:
dict_b = {
'id': 2,
'source': 'y',
'location': 'south'
}

Für beide lässt sich jeweils ein Pattern identifizieren:


#a
{
'id': int,
'meta': {'source': str,
'location': str}
}

und


#b
{
'id': int,
'source': str,
'location': str
}

Beide lassen sich dann in ein match...case-Statement verpacken:

Anzeige
Anzeige
for d in [dict_a, dict_b, 'test']:
match d:
case {'id': ident,
'meta': {'source': source,
'location': loc}}:
print(ident, source, loc)
case {'id': ident,
'source': source,
'location': loc}:
print(ident, source, loc)
case _:
print('no match')

Außer Dictionaries können auch Sequenzen (Tupel oder Listen), primitive Datentypen oder Klasseninstanzen abgeglichen werden. Eine umfassende Liste der unterschiedlichen Patterns bietet die Doku (PEP 635). Gerade zur Datenverarbeitung könnte sich Structural-Pattern-Matching als echter Game-Changer erweisen. Wer tiefer einsteigen will, findet beispielsweise in diesem Video weitere Erläuterungen.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige