Python 3.9

Python 3.9.0 (final) wurde am 5. Oktober 2020 veröffentlicht. Die Funktionen für 3.9 sind in PEP 596 definiert, und eine detaillierte Beschreibung der Änderungen finden Sie in What’s New in Python 3.9

Funktionen

Status

PEP 573

Schneller Zugriff auf den Modulzustand aus Methoden von C-Erweiterungstypen

Nicht relevant

PEP 584

Union-Operatoren zu dict hinzugefügt

Vollständig [1]

PEP 585

Typ-Hinting für Generics in Standard-Collections

PEP 593

Flexible Funktions- und Variablen-Annotationen

PEP 602

CPython führt einen jährlichen Release-Zyklus ein. Statt jährlich wird ein zweimonatiger Release-Zyklus angestrebt

Nicht relevant

PEP 614

Gelockerte Grammatik-Einschränkungen für Dekoratoren

PEP 615

Die IANA-Zeitzonendatenbank ist nun im Modul zoneinfo in der Standardbibliothek enthalten

PEP 616

String-Methoden zum Entfernen von Präfixen und Suffixen

PEP 617

CPython verwendet nun einen neuen Parser auf Basis von PEG

Nicht relevant

Weitere Sprachänderungen:

__import__() löst nun ImportError statt ValueError aus

Vollständig

Python ermittelt nun den absoluten Pfad des in der Befehlszeile angegebenen Skript-Dateinamens (z. B.: python3 script.py): Das Attribut __file__ des Moduls __main__ wurde zu einem absoluten statt einem relativen Pfad

Standardmäßig wird zur Optimierung der Leistung das Argument errors nur beim ersten Kodierungs-/Dekodierungsfehler geprüft, und das Argument encoding wird bei leeren Zeichenketten mitunter ignoriert

„“.replace(„“, s, n) gibt nun s statt einer leeren Zeichenkette für alle von null verschiedenen n zurück. Dies ist nun konsistent mit „“.replace(„“, s)

Jeder gültige Ausdruck kann nun als Dekorator verwendet werden. Zuvor war die Grammatik weitaus restriktiver

Die parallele Ausführung von aclose() / asend() / athrow() ist nun untersagt, und ag_running spiegelt nun den tatsächlichen Ausführungsstatus des asynchronen Generators wider

Unerwartete Fehler beim Aufruf der Methode __iter__ werden im in-Operator sowie in den Funktionen contains(), indexOf() und countOf() des operator-Moduls nicht länger durch TypeError verdeckt

Nicht eingeklammerte Lambda-Ausdrücke können nicht länger der Ausdrucksteil einer if-Klausel in Comprehensions und Generator-Ausdrücken sein

Änderungen an eingebauten Modulen:

asyncio

Aufgrund erheblicher Sicherheitsbedenken wird der Parameter reuse_address von asyncio.loop.create_datagram_endpoint() nicht mehr unterstützt

Eine neue Coroutine shutdown_default_executor() wurde hinzugefügt, die ein Herunterfahren des Standard-Executors plant, das auf das Beenden des ThreadPoolExecutor wartet. Außerdem wurde asyncio.run() aktualisiert, um die neue Coroutine zu verwenden.

asyncio.PidfdChildWatcher hinzugefügt, eine Linux-spezifische Child-Watcher-Implementierung, die Prozess-Dateideskriptoren abfragt

eine neue coroutine asyncio.to_thread() hinzugefügt

Beim Abbrechen des Tasks aufgrund eines Timeouts wartet asyncio.wait_for() nun, bis der Abbruch abgeschlossen ist, auch im Fall, dass das Timeout <= 0 ist, ebenso wie bei positiven Timeouts

asyncio löst nun TyperError aus, wenn inkompatible Methoden mit einem ssl.SSLSocket-Socket aufgerufen werden

gc

Die Speicherbereinigung blockiert nicht bei wiederbelebten Objekten

Eine neue Funktion gc.is_finalized() hinzugefügt, um zu prüfen, ob ein Objekt vom Garbage Collector finalisiert wurde

math

Die Funktion math.gcd() wurde erweitert, um mehrere Argumente zu verarbeiten. Zuvor unterstützte sie nur zwei Argumente

math.lcm() hinzugefügt: gibt das kleinste gemeinsame Vielfache der angegebenen Argumente zurück

math.nextafter() hinzugefügt: gibt den nächsten Gleitkommawert nach x in Richtung y zurück

math.ulp() hinzugefügt: gibt den Wert des niederwertigsten Bits einer Gleitkommazahl zurück

os

Die Linux-spezifischen os.pidfd_open() und os.P_PIDFD bereitgestellt

Die Funktion os.unsetenv() ist nun auch unter Windows verfügbar

Vollständig

Die Funktionen os.putenv() und os.unsetenv() sind nun immer verfügbar

Vollständig

Funktion os.waitstatus_to_exitcode() hinzugefügt: wandelt einen Wartestatus in einen Exit-Code um

random

Eine neue Methode random.Random.randbytes hinzugefügt: erzeugt zufällige Bytes

sys

Ein neues Attribut sys.platlibdir hinzugefügt: Name des plattformspezifischen Bibliotheksverzeichnisses

Zuvor war sys.stderr im nicht-interaktiven Betrieb blockgepuffert. Nun ist stderr standardmäßig stets zeilengepuffert

Hinweise