Python 3.9 ist da – das sind die nennenswertesten Neuerungen

Bild: Sharaf Maksumov/ Shutterstock
Python, die nach dem britischen Comedy-Ensemble Monty Python benannte und neuerdings vor allem unter Data-Scientists beliebte Programmiersprache, hat jetzt mit Version 3.9 ein Versionsupdate erhalten. Der Release folgt einem neuen, ab jetzt jährlichen Release-Zyklus. Wir haben uns die Neuerungen genauer angeschaut.
Python hatte in vorherigen Versionsupdates bereits mit Performanzverbesserungen geglänzt. Python 3.9 kommt mit zwei großen Verbesserungen, die allerdings keine Breaking Changes darstellen. Zum einen findet das in Python 3.8 eingeführte vectorcall
–Protokoll vermehrt Verwendung. Indem das Protokoll sogenannte temporäre Objekte, die extra für einen Funktionsaufruf erstellt wurden, minimiert oder komplett eliminiert, sorgt vectorcall
für bessere Performanz bei einigen vielgenutzten Funktionsaufrufen. Darunter die Python-Build-ins range
, tuple
, set
, frozenset
, list
und dict
.
Ebenfalls für einen Performanz-Zuwachs sorgt ein neuer Parser für die CPython-Laufzeitumgebung. Entworfen, um interne Inkonsistenzen im ursprünglichen Parser zu fixen, ist mehr Schnelligkeit eine nennenswerte Randerscheinung des Features, vor allem beim Parsen großer Mengen an Code.
Die Manipulation sogenannter Common-Data-Types war immer schon eine der Stärken Pythons. Mit neuen Features für Strings und Dictionaries soll das ab Version 3.9 noch einfacher werden. Für Strings gibt es in Python 3.9 neue Methoden zum Entfernen von Prä- und Suffixen, ein Vorgang, der bisher viel manuelles Tweaken erfordert hatte. Für Dictionaries gibt es in der neuen Version zwei neue Union-Operatoren: einen zum Zusammenführen zweier Dictionaries und einen, der es erlaubt, den Inhalt eines Dictionaries mit dem eines anderen zu aktualisieren.
Bereits in vorherigen Versionen wurde der Support für sogenanntes Type-Hinting in Python erweitert. Das zielt vor allem auf sogenannte Linter und andere Code-Checking-Tools ab. Typen werden in Python nach wie vor nicht während der Laufzeit enforciert und es gibt auch keine Pläne, Python zur statisch typisierten Programmiersprache zu machen. Type-Hints tragen allerdings auch in dynamisch typisierten Sprachen zur „sprachlichen Konsistenz“ bei – wovon vor allem größere Codebases profitieren können.
Zwei neue Features für Type-Hinting und Typenannotationen fanden Eingang in Python 3.9. Zum einen sind Type-Hits für Listen und Dictionaries mit Version 3.9 nativ in Python verfügbar. Damit lassen sich etwa Listen als Listen ihres Typs beschreiben: List[int]
beschreibt etwa eine Liste von Integern, bisher brauchtet ihr dafür die typing
-Library. Eine weitere Neuerung, die Pythons Typing-Verhalten betrifft, sind flexible Funktions- und Variablenannotationen. Das bedeutet, ab Version 3.9 wird es möglich sein, mit Hilfe des Annotated Type den Typen einer Entität über Metadaten zu beschreiben, die während der Laufzeit ausgewertet werden können – oder mit Hilfe von Lintern schon vorher.
Annotated[int, ctype(„char“)]
kann verwendet werden, um einen Integer zu beschreiben, der als Entität von Typ char
in C betrachtet werden soll. Per Default würde Python mit dieser Information nichts weiter anfangen, das Feature zielt vor allem auf Linting-Tools ab.
Internals sind eine Sache, an der mit jedem Versionsupdate gefeilt wird – auch in Version 3.9 wurden diesbezüglich einige Neuerungen umgesetzt. Zum einen wurde der Mechanismus, wie Module mit der Import-Maschinerie interagieren, überarbeitet. In C geschriebene Python-Erweiterungen sollen zukünftig von einem neuen Lademechanismus Gebrauch machen können, der ihr Verhalten bei einem Import an das regulärer Module angleicht. Folgende Module der Standardlibrary unterstützen das Verhalten:
_abc
, audioop
, _bz2
, _codecs
, _contextvars
, _functools
, _crypt
, _json
, _locale
, operator
, resource
, time
, _weakref
.
Zum anderen bringt der Release von Version 3.9 eine neue internale Binärschnittstelle – oder ABI – für CPython mit sich, die den gesamten Lebenszyklus von Python 3 überdauern soll. Bei vorherigen Versionen war es bisher so, dass große Revisionen ABI-inkompatibel mit ihren Vorgängern waren – mit der Folge, dass Extension-Module für jede neue Version rekompiliert werden mussten. Ab Version 3.9 sollen alle Erweiterungsmodule, die die neue stable ABI nutzen, über kommende Python-Versionen hinweg funktionieren. Folgende Module machen in Zukunft von der ABI Gebrauch: audioop
, ast
, grp
, _hashlib
, pwd
, _posixsubprocess
, random
, select
, struct
, zlib
und termios
.
Zum Weiterlesen:
- Python: Wie aus einem Nerd-Projekt eine der beliebtesten Programmiersprachen der jüngsten Zeit wurde
- Sechs Gründe, warum ihr spätestens 2020 Python lernen solltet
- WTF Python: Dieses GitHub-Repository zeigt kuriose Funktionen der Programmiersprache
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