Anzeige
Anzeige
News

Python 3.10 punktet mit Structural-Pattern-Matching und besseren Fehlermeldungen

Python ist in Version 3.10 verfügbar. Der jüngste Release der über 30 Jahre alten Programmiersprache kommt mit wenigen neuen Features, die es aber durchaus in sich haben. Das steckt drin.

3 Min.
Artikel merken
Anzeige
Anzeige

Die Schlange war zwar nicht Namensgeberin Pythons, wird aber aber trotzdem damit assoziiert. (Foto: Alan Tunnicliffe/Shutterstock 

Genau ein Jahr nach der Veröffentlichung von Version 3.9 hat Python gemäß des 2020 eingeführten, schnelleren Release-Zyklus erneut ein Update erhalten. Nach über einem Jahr Entwicklungszeit und zahlreichen Beta-Releases ist V 3.10 jetzt als Stable Version verfügbar.

Strukturelles Pattern-Matching

Anzeige
Anzeige

Der Release führt nicht allzu viele Neuerungen ein, bringt mit Structural-Pattern-Matching aber eine mit sich, die unter Pythonistas als vielleicht wichtigste – wenn auch kontroverse – Ergänzung der Sprachsyntax seit async gehandelt wird. Die 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.

Hierfür wurde Pythons Syntax 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:

Anzeige
Anzeige
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 der Neuerung 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 – beispielsweise Sequenzen (Tupel oder Listen), Dictionaries, primitiven Datentypen oder Klasseninstanzen.

Für zwei Dictionaries mit unterschiedlichen Strukturen:

Anzeige
Anzeige

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

und


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

lässt sich jeweils ein Pattern identifizieren:


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

und

Anzeige
Anzeige

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

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

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')

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.

Präzisere Fehlermeldungen

Die Fehlermeldungen in Python waren lange Zeit den Launen des Parsers ausgeliefert. Mit Python 3.9 wurde ein völlig neuer Parser eingeführt – er gilt als schneller, robuster und ist für das Python-Team wohl auch leichter zu warten. Mit Version 3.10 ist er jetzt endlich offiziell verfügbar. Er bietet bessere, genauere Fehlermeldungen – so wird beispielsweise ein Syntax Error ab V 3.10 auch als solcher deklariert.

Anzeige
Anzeige

Variablen zur Spezifikation von Parametern

Mit dem Typisierungsmodul von Python, das dazu dient, Code mit Typinformationen zu versehen, können die Typen einer aufrufbaren Struktur, wie beispielsweise einer Funktion, beschrieben werden. Diese Typinformationen können nicht über sogenannte Callables hinweg weitergegeben werden. Das macht es schwierig, zum Beispiel Funktionsdekoratoren zu annotieren.
Zwei mit V 3.10 eingeführte Ergänzungen, typing.ParamSpec und typing.Concatenate, ermöglichen es, Callables mit abstrakteren Informationen über die Typendefinition zu annotieren. Mit ParamSpec kann angegeben werden, wo Positions- und Keywordparameter erfasst werden sollen. Via Concatenate kann festgelegt werden, wie Parameter hinzugefügt oder entfernt werden – ein gängiger Vorgang bei sogenannten Dekoratoren.

Das war noch längst nicht alles

Weitere Neuerungen in Python 3.10 beinhalten ein neues strict-Keyword für die zip()-Methode, Unterstützung für eine mehrzeilige, geklammerte Syntax für with-Statements, eine neue, kürzere Schreibweise für sogenannte Union Types sowie die Möglichkeit, Variablen als Typen-Aliase zu definieren. Alle Änderungen und Neuerungen im Detail sind in der Doku nachzulesen.

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