header banner
Default

Python 38 est nouveau


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.

The Elephant – oder eher das Walross – in the Room: Assignment-Expressions

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.

Weitere Neuerungen

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.

Upgrade ja oder nein?

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

Verpasse keine News zu UX & Design 💌

Bitte gib eine gültige E-Mail-Adresse ein.

Es gab leider ein Problem beim Absenden des Formulars. Bitte versuche es erneut.

Bitte gib eine gültige E-Mail-Adresse ein.

Hinweis zum Newsletter & Datenschutz

Sources


Article information

Author: Kelly Cooley

Last Updated: 1703677082

Views: 1035

Rating: 4.3 / 5 (57 voted)

Reviews: 98% of readers found this page helpful

Author information

Name: Kelly Cooley

Birthday: 2009-06-11

Address: 0624 Lane Mall, Heatherberg, MD 22561

Phone: +3943825249903262

Job: Biomedical Engineer

Hobby: Photography, Metalworking, Graphic Design, Running, Orienteering, Wildlife Photography, Board Games

Introduction: My name is Kelly Cooley, I am a variegated, priceless, treasured, daring, Gifted, strong-willed, candid person who loves writing and wants to share my knowledge and understanding with you.