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 wird performanter
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.
Neue string- und dictionary-Funktionen
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.
Neue Type-Operatoren
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.
Freshness unter der Haube
Neuer Lademechanismus für Importe
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
.
Neue Binärschnittstelle für CPython
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