
Python 3.8 ist da. (Grafik: Shutterstock)
Python, die Programmiersprache der Data-Scientists, der Programmier-Newbies, der „Ich-will-nur-schnell-ein-Skript-schreiben“-Entwickler, der Machine-Learning-Experten und aller anderen, hat ihr lang antizipiertes Update auf Version 3.8 erhalten. Die größte Neuerung in Python 3.8 sind Assignment-Expressions. Schon im Vorfeld angekündigt und kontrovers diskutiert, führte die Entscheidung und die darauffolgende Debatte etwa dazu, dass der Begründer der Sprache, Guido van Rossum, im letzten Jahr von seiner Leitungsposition innerhalb der Python-Community zurücktrat. An die Stelle einer einzelnen vorstehenden Leitungsfigur trat ein durch die Core-Entwickler demokratisch bestimmter fünfköpfiger Lenkungsausschuss.
Für Assignment-Expressions wurde eine neue Schreibweise eingeführt: :=
. Das sieht aus wie ein auf der Seite liegendes Walross, also die Augen und Zähne – und wird deshalb auch Walrus-Operator genannt.
Assignment-Expressions erlauben es euch, einen Wert in derselben Expression zurückzugeben, in der ihr ihn zuweist.
Einer Variable einen Wert zuzuweisen und ihren Wert ausgeben ging vorher so:
>>> >>> walrus = False >>> print(walrus) False
In Version 3.8 könnt ihr das jetzt zu einem Statement kombinieren:
>>> >>> print(walrus := True) True
Die Assignment-Expression erlaubt es euch, walrus
den Wert True
zuzuweisen und diesen Wert im gleichen Zug auszugeben. Disclaimer: Der Walrus-Operator tut nichts, was ihr nicht auch ohne tun könntet. Es ist einfach nur eine neue Art der Notation, durch die manche Programmstrukturen einfacher aufzuschreiben sind und euer Code besser lesbar wird. Ein Muster, an dem sich die Stärken des Walrus-Operators ganz gut aufzeigen lassen, sind while
-Loops. Der folgende Code zum Beispiel fordert den User solange auf, eine Eingabe zu machen, bis er „quit“ schreibt.
inputs = list() current = input("Write something: ") while current != "quit": inputs.append(current) current = input("Write something: ")
Etwas eleganter könntet ihr das über einen Infinite-While-Loop, lösen, den ihr mithilfe des break
-statements stoppt:
inputs = list()
while True:
current = input("Write something: ")
if current == "quit":
break
inputs.append(current)
Wie ihr seht, macht dieser Code genau das Gleiche, jedoch ohne sich zu wiederholen.
Wenn ihr jetzt eine Assignment-Expression nutzt, sieht das Ganze so aus:
inputs = list() while (current := input("Write something: ")) != "quit": inputs.append(current)
Und wie ihr jetzt seht, ist das noch kürzer und einfacher. Der Test ist jetzt in einer Zeile mit dem while
-statement, was erstmal logischer erscheint. In der einen Zeile passieren jetzt allerdings mehrere Dinge. Dadurch wird das Ganze eventuell für den einen oder die andere etwas komplexer zu lesen und zu verstehen. Ihr könnt euch im Einzelfall ja immer noch gegen die neue Schreibweise entscheiden.
Wer weiter in die Tiefe gehen will, findet in PEP 572 weitere Beispiele zur Verwendung des Walrus-Operators, außerdem Details und Gründe für die Einführung der neuen Notation.
Die Assignment-Expressions sind natürlich nicht alles. In Python 3.8 könnt ihr erstmals Positional-only-Arguments definieren, neue Features für präzisere Typisierungen und f-Strings nutzen, die euch das Debuggen eures Codes vereinfachen sollen. Auch gibt es in Version 3.8 erstmals eine Warnung, sollte eure Syntax potentiell Gefahren bergen und die math
– und statistics
-Funktionen wurden ergänzt und verbessert. Außerdem neu ist etwa das importlib.metadata
–Modul. Alle Details dazu und was es sonst noch neues gibt, könnt ihr in der gewohnt wunderbar ausführlichen Doku nachlesen.
Wenn ihr neugierig auf die Neuerungen seid, werdet ihr um eine Installation des Updates nicht herumkommen. In pyenv oder Anaconda ist es aber glücklicherweise problemlos möglich, mehrere Versionen parallel zu installieren. Wenn ihr diese Tools nicht nutzt, Version 3.8 aber trotzdem einfach mal ausprobieren wollt: Der offizielle Python-3.8-Docker-Container ist für euch.
Ihr wollt nicht nur Ausprobieren, sondern fragt euch, ob ihr eure Projekte jetzt schon upgraden solltet?
Wer von 3.7 auf 3.8 upgradet, dürfte nur sehr wenige Probleme damit haben und kann sich jetzt schon über die Verbesserungen, die das neue Release mitbringt, freuen. Verschiedene Betas von 3.8 sind seit Monaten im Umlauf, die meisten Bugs sind dementsprechend wahrscheinlich gefixed. Unter Porting to Python 3.8 in der Doku findet ihr weitere Informationen und alle nötigen Details, die ihr beim Wechsel beachten müsst.
Wenn ihr lieber auf Nummer sicher gehen wollt: Es ist immer ratsam, den ersten Maintainance-Release abzuwarten. Sind mehrere Entwickler an eurem Code beteiligt – fragt sie vielleicht vorher. Sonst zwingt ihr sie gegebenenfalls ungewollt ebenfalls zu einem Upgrade. Die meisten Libraries werden ältere Versionen wohl noch für eine ganze Weile weiterhin unterstützen.
Zum Weiterlesen:
- Python: Wie aus einem Nerd-Projekt eine der beliebtesten Programmiersprachen der jüngsten Zeit wurde
- Das sind die 10 beliebtesten Programmiersprachen – laut IEEE-Language-Ranking
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
Ääähhh….
while input(„Write Something“) != „quit“: pass
tada…