Python 3.9

Python 3.9.0 (definitief) werd uitgebracht op 5 oktober 2020. De functies voor 3.9 zijn gedefinieerd in PEP 596 en een gedetailleerde beschrijving van de wijzigingen is te vinden in What’s New in Python 3.9

Functies

Status

PEP 573

Snelle toegang tot modulestatus vanuit methoden van C-extensietypes

Niet relevant

PEP 584

Union-operatoren toegevoegd aan dict

Voltooid [1]

PEP 585

Type-hinting van generieke types in standaardcollecties

PEP 593

Flexibele functie- en variabele-annotaties

PEP 602

CPython hanteert een jaarlijkse releasecyclus. In plaats van jaarlijks wordt gestreefd naar een releasecyclus van twee maanden

Niet relevant

PEP 614

Versoepelde grammaticabeperkingen op decorators

PEP 615

De IANA Time Zone Database is nu aanwezig in de standaardbibliotheek in de zoneinfo-module

PEP 616

Tekenreeksmethoden om voor- en achtervoegsels te verwijderen

PEP 617

CPython gebruikt nu een nieuwe parser op basis van PEG

Niet relevant

Overige taalwijzigingen:

__import__() roept nu ImportError op in plaats van ValueError

Voltooid

Python haalt nu het absolute pad op van de scriptbestandsnaam die op de opdrachtregel is opgegeven (bijv.: python3 script.py): het attribuut __file__ van de __main__-module is een absoluut pad geworden, in plaats van een relatief pad

Standaard wordt voor de beste prestaties het errors-argument alleen gecontroleerd bij de eerste codeer-/decodeerfout, en wordt het encoding-argument soms genegeerd voor lege tekenreeksen

“”.replace(“”, s, n) retourneert nu s in plaats van een lege tekenreeks voor alle niet-nul n. Het is nu consistent met “”.replace(“”, s)

Elke geldige expressie kan nu als decorator worden gebruikt. Voorheen was de grammatica veel restrictiever

Het parallel uitvoeren van aclose() / asend() / athrow() is nu verboden, en ag_running weerspiegelt nu de werkelijke uitvoeringsstatus van de async generator

Onverwachte fouten bij het aanroepen van de methode __iter__ worden niet langer gemaskeerd door TypeError in de in-operator en de functies contains(), indexOf() en countOf() van de operator-module

Lambda-expressies zonder haakjes kunnen niet langer het expressiegedeelte zijn in een if-clausule in comprehensions en generatorexpressies

Wijzigingen in ingebouwde modules:

asyncio

Vanwege aanzienlijke beveiligingszorgen wordt de parameter reuse_address van asyncio.loop.create_datagram_endpoint() niet langer ondersteund

Een nieuwe coroutine shutdown_default_executor() toegevoegd die een afsluiting plant voor de standaard executor die wacht tot de ThreadPoolExecutor klaar is met afsluiten. Ook is asyncio.run() bijgewerkt om de nieuwe coroutine te gebruiken.

asyncio.PidfdChildWatcher toegevoegd, een Linux-specifieke child-watcher-implementatie die proces-bestandsdescriptors pollt

een nieuwe coroutine asyncio.to_thread() toegevoegd

Bij het annuleren van de taak vanwege een time-out wacht asyncio.wait_for() nu tot de annulering is voltooid, ook in het geval dat timeout <= 0 is, net zoals bij positieve time-outs

asyncio roept nu TyperError op bij het aanroepen van incompatibele methoden met een ssl.SSLSocket-socket

gc

Garbage collection blokkeert niet op herrezen objecten

Een nieuwe functie gc.is_finalized() toegevoegd om te controleren of een object door de garbage collector is gefinaliseerd

math

De functie math.gcd() uitgebreid om meerdere argumenten aan te kunnen. Voorheen ondersteunde deze slechts twee argumenten

math.lcm() toegevoegd: retourneert het kleinste gemene veelvoud van de opgegeven argumenten

math.nextafter() toegevoegd: retourneert de eerstvolgende floating-point-waarde na x in de richting van y

math.ulp() toegevoegd: retourneert de waarde van het minst significante bit van een float

os

De Linux-specifieke os.pidfd_open() en os.P_PIDFD beschikbaar gemaakt

De functie os.unsetenv() is nu ook beschikbaar op Windows

Voltooid

De functies os.putenv() en os.unsetenv() zijn nu altijd beschikbaar

Voltooid

Functie os.waitstatus_to_exitcode() toegevoegd: converteert een wachtstatus naar een exit-code

random

Een nieuwe methode random.Random.randbytes toegevoegd: genereert willekeurige bytes

sys

Een nieuw attribuut sys.platlibdir toegevoegd: naam van de platformspecifieke bibliotheekmap

Voorheen was sys.stderr block-buffered wanneer niet-interactief. Nu is stderr standaard altijd line-buffered

Opmerkingen