Python 3.9 mit PEG-Parser, Merge- und Update-Operatoren für Dict

Die Entwickler der Programmiersprache Python wollen von einem bisher auf grob 18 Monate ausgelegten Release-Zyklus auf einen festen 12-monatigen umstellen.

Zu den Highlights von Python 3.9 gehören ein neuer Parser namens PEG, Merge- und Update-Operatoren für die “dict”-Klasse, die Integration generischer Typen in die Type Annotations und ein Zeitzonen-Modul.

Python 3.9 verwendet unter anderem einen neuen Parser namens PEG. An dem hat auch Python-Gründer Guido van Rossum mitgearbeitet. Er löst den bisherigen Parser LL ab (PEP 617). Während der alte und der neu sich in Sachen Performance ähneln, kann PEG flexibler mit neuen Sprachfeatures umgehen als der Vorgänger. Ab Python 3.10 wollen sich die Python-Entwickler diesen Umstand zunutze machen und LL über Bord werfen. Bereits jetzt verwende das AST-Modul (Abstract Syntax Trees) den neuen Parser erfolgreich. In Version 3.9 lässt sich aber auch noch der alte Parser explizit aktivieren.

Merge und Update

Die Dictionary-Klasse erhält die beiden Operatoren “|” (Merge) und “|=” (Update), weil die aktuellen Vorgehensweisen beim Vereinen zweier Dicts verschiedene Nachteile mitbringen (PEP 584). Der Weg über “dict.update” ist umständlich und nicht intuitiv, den offiziellen Weg aus PEP 448, zwei Dicts zu vereinen, führt über {**d1, **d2} und sei laut van Rossum nahezu unbekannt. Daneben gebe es noch weitere eher wenig bekannte Möglichkeiten. Neben Beispielen für die alten wegen zeigen die Release Notes auch ein Beispiel für den Einsatz der neuen Operatoren:

>>> d = {'spam': 1, 'eggs': 2, 'cheese': 3}
>>> e = {'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> d | e
{'spam': 1, 'eggs': 2, 'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> e | d
{'aardvark': 'Ethel', 'spam': 1, 'eggs': 2, 'cheese': 3}

Offensichtlich ist hier: Beim Vereinen überschreibt das letztgenannte Dictionary die Werte des ersten. Wer das neue Feature einsetzen möchte, sollte sich auch die Kritikpunkte im PEP 584 durchlesen, die unter anderem die Performance oder die Unterschiede zum Union-Feature betreffen.

Präfixe und Suffixe weg

Weiterhin bietet Python 3.9 mit “removeprefix()” und “removesuffix()” neue String-Methoden (PEP 616), deren Arbeitsweise bereits aus den Namen ersichtlich wird: Die erste entfernt Präfixe, die zweite Suffixe. Hintergrund ist hier, dass die Nutzer dieses Verhalten von den existierenden Methoden “str.lstrip” und “str.rstrip” erwarten, die allerdings tatsächlich anders funktionieren, was Verwirrung stiftet. Um Präfixe und Suffixe zu entfernen, greifen viele Nutzer zudem zu umständlichen Regular Expressions. Die neuen Methoden schaffen hier Abhilfe. Ein einfaches Beispiel, um die Anführungszeichen aus einem Zitat zu entfernen:

def strip_quotes(text):
return text.removeprefix('"').removesuffix('"')

Eine weitere größere Änderung betrifft den Umgang mit Type Annotations (PEP 585). Entwickler können nun die eingebauten Collection Types wie “list” oder “dict” als generische Typen verwenden. Bislang war eine doppelte Typenhierarchie nötig und mussten sie die großgeschriebenen Typen “List” und “Dict” aus dem “Typing”-Modul importieren. Das wiederum liege laut PEP 585 daran, dass Python das statische Typsystem auf die existierende Runtime aufsetzte, was unter anderem zu den genannten Einschränkungen führte. Die Neuerung erlaubt es Nutzern, ihre Programme leichter zu annotieren und vereinfacht auch Python-Trainern die Arbeit.

Auch bei den Modulen hat sich etwas getan. Ein neues Zeitzonen-Modul heißt “zoneinfo” und integriert die IANA-Zeitzonen-Datenbank in die Standardbibliothek von Python. Verschiedene weitere Module haben die Entwickler zudem verbessert. Dazu zählen unter anderem “ast”, “asyncio”, “gc” und “datetime”. Die Änderungen liegen bei allen im Detail und lassen sich, ebenso wie weitere Änderungen an der neuen Version, in den Release Notes nachlesen.

 

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben