Python 3.8

Python 3.8.0 (final) wurde am 14. Oktober 2019 veröffentlicht. Die Funktionen für 3.8 sind in PEP 569 definiert, und eine detaillierte Beschreibung der Änderungen finden Sie in What’s New in Python 3.8.

Funktionen

Status

PEP 570

Nur-positionale Argumente

PEP 572

Zuweisungsausdrücke

Vollständig

PEP 574

Pickle-Protokoll 5 mit Out-of-Band-Daten

PEP 578

Laufzeit-Audit-Hooks

PEP 587

Python-Initialisierungskonfiguration

PEP 590

Vectorcall: ein schnelles Aufrufprotokoll für CPython

Verschiedenes

f-Strings unterstützen = für selbstdokumentierende Ausdrücke und Debugging

Vollständig

Weitere Sprachänderungen:

Eine continue-Anweisung war aufgrund eines Implementierungsproblems in der finally-Klausel unzulässig. In Python 3.8 wurde diese Einschränkung aufgehoben

Vollständig

Die Typen bool, int und fractions.Fraction verfügen nun über eine Methode as_integer_ratio(), wie sie bei float und decimal.Decimal zu finden ist

Die Konstruktoren von int, float und complex verwenden nun die spezielle Methode __index__(), sofern verfügbar und die entsprechende Methode __int__(), __float__() oder __complex__() nicht verfügbar ist

Unterstützung für N{name}-Escapes in regulären Ausdrücken hinzugefügt

Dicts und Dict-Views sind nun mit reversed() in umgekehrter Einfügereihenfolge iterierbar

Die für Schlüsselwortnamen in Funktionsaufrufen zulässige Syntax wurde weiter eingeschränkt. Insbesondere ist f((keyword)=arg) nicht mehr zulässig

Verallgemeinertes Entpacken von Iterables in yield- und return-Anweisungen erfordert keine umschließenden Klammern mehr

Wenn in Code wie [(10, 20) (30, 40)] ein Komma fehlt, zeigt der Compiler eine SyntaxWarning mit einem hilfreichen Vorschlag an

Arithmetische Operationen zwischen Unterklassen von datetime.date oder datetime.datetime und datetime.timedelta-Objekten geben nun eine Instanz der Unterklasse zurück, statt der Basisklasse

Wenn der Python-Interpreter durch Ctrl-C (SIGINT) unterbrochen wird und die daraus resultierende KeyboardInterrupt-Ausnahme nicht abgefangen wird, beendet sich der Python-Prozess nun über ein SIGINT-Signal oder mit dem korrekten Exit-Code, sodass der aufrufende Prozess erkennen kann, dass er aufgrund eines Ctrl-C beendet wurde

Einige fortgeschrittene Programmierstile erfordern die Aktualisierung des types.CodeType-Objekts für eine bestehende Funktion

Für Ganzzahlen erlaubt die dreiargumentige Form der Funktion pow() nun einen negativen Exponenten, sofern die Basis relativ prim zum Modul ist

Dict-Comprehensions wurden mit Dict-Literalen angeglichen, sodass zuerst der Schlüssel und danach der Wert berechnet wird

Die Methode object.__reduce__() kann nun ein Tupel mit zwei bis sechs Elementen zurückgeben

Änderungen an eingebauten Modulen:

asyncio

asyncio.run() hat den Status von der vorläufigen zur stabilen API erreicht

Vollständig

Die Ausführung von python -m asyncio startet eine nativ asynchrone REPL

Die Ausnahme asyncio.CancelledError erbt nun von BaseException statt von Exception und erbt nicht mehr von concurrent.futures.CancelledError

Vollständig

asyncio.Task.get_coro() wurde hinzugefügt, um die umschlossene Coroutine innerhalb eines asyncio.Task abzurufen

Asyncio-Tasks können nun benannt werden, entweder durch Übergabe des Schlüsselwortarguments name an asyncio.create_task() oder die Event-Loop-Methode create_task(), oder durch Aufruf der Methode set_name() auf dem Task-Objekt

Unterstützung für Happy Eyeballs zu asyncio.loop.create_connection() hinzugefügt. Zur Festlegung des Verhaltens wurden zwei neue Parameter hinzugefügt: happy_eyeballs_delay und interleave.

gc

get_objects() kann nun einen optionalen generation-Parameter erhalten, der eine Generation angibt, aus der Objekte abgerufen werden sollen. (Beachten Sie jedoch, dass gc zwar eingebaut ist, get_objects() in MicroPython aber nicht implementiert ist)

math

Neue Funktion math.dist() zur Berechnung des euklidischen Abstands zwischen zwei Punkten hinzugefügt

Die Funktion math.hypot() wurde erweitert, um mehrere Dimensionen zu verarbeiten

Neue Funktion math.prod() hinzugefügt, als Analogon zu sum(), die das Produkt aus einem „start“-Wert (Standard: 1) und einem iterierbaren Objekt von Zahlen zurückgibt

Zwei neue kombinatorische Funktionen math.perm() und math.comb() hinzugefügt

Neue Funktion math.isqrt() zur Berechnung exakter ganzzahliger Quadratwurzeln ohne Umwandlung in Gleitkommazahlen hinzugefügt

Die Funktion math.factorial() akzeptiert keine Argumente mehr, die nicht int-artig sind

Vollständig

sys

Neue Funktion sys.unraisablehook() hinzugefügt, die überschrieben werden kann, um zu steuern, wie „unraisable exceptions“ behandelt werden