Python 3.8

Python 3.8.0 (definitief) werd uitgebracht op 14 oktober 2019. De functies voor 3.8 zijn gedefinieerd in PEP 569 en een gedetailleerde beschrijving van de wijzigingen is te vinden in What’s New in Python 3.8.

Functies

Status

PEP 570

Positie-only argumenten

PEP 572

Toewijzingsexpressies

Voltooid

PEP 574

Pickle-protocol 5 met out-of-band-data

PEP 578

Runtime-audithooks

PEP 587

Python-initialisatieconfiguratie

PEP 590

Vectorcall: een snel aanroepprotocol voor CPython

Diversen

f-strings ondersteunen = voor zelfdocumenterende expressies en debugging

Voltooid

Overige taalwijzigingen:

Een continue-statement was illegaal in de finally-clausule vanwege een probleem met de implementatie. In Python 3.8 is deze beperking opgeheven

Voltooid

De types bool, int en fractions.Fraction hebben nu een methode as_integer_ratio() zoals die in float en decimal.Decimal

Constructors van int, float en complex gebruiken nu de speciale methode __index__(), indien beschikbaar en de bijbehorende methode __int__(), __float__() of __complex__() niet beschikbaar is

Ondersteuning toegevoegd voor N{name}-escapes in reguliere expressies

Dict en dictviews zijn nu itereerbaar in omgekeerde invoegvolgorde met behulp van reversed()

De toegestane syntax voor keywordnamen in functieaanroepen is verder beperkt. In het bijzonder is f((keyword)=arg) niet langer toegestaan

Gegeneraliseerde iterabele uitpakking in yield- en return-statements vereist niet langer omsluitende haakjes

Wanneer een komma wordt gemist in code zoals [(10, 20) (30, 40)], toont de compiler een SyntaxWarning met een nuttige suggestie

Rekenkundige bewerkingen tussen subklassen van datetime.date of datetime.datetime en datetime.timedelta-objecten retourneren nu een instantie van de subklasse, in plaats van de basisklasse

Wanneer de Python-interpreter wordt onderbroken door Ctrl-C (SIGINT) en de resulterende KeyboardInterrupt-uitzondering niet wordt opgevangen, sluit het Python-proces nu af via een SIGINT-signaal of met de juiste exit-code, zodat het aanroepende proces kan detecteren dat het is gestopt vanwege een Ctrl-C

Sommige geavanceerde programmeerstijlen vereisen het bijwerken van het types.CodeType-object voor een bestaande functie

Voor gehele getallen staat de drie-argumentvorm van de functie pow() nu een negatieve exponent toe in het geval dat het grondtal relatief priem is ten opzichte van de modulus

Dict-comprehensions zijn gelijkgetrokken met dict-literals, zodat de sleutel eerst wordt berekend en de waarde als tweede

De methode object.__reduce__() kan nu een tuple van twee tot zes elementen lang retourneren

Wijzigingen in ingebouwde modules:

asyncio

asyncio.run() is van de voorlopige naar de stabiele API gepromoveerd

Voltooid

Het uitvoeren van python -m asyncio start een natief asynchrone REPL

De uitzondering asyncio.CancelledError erft nu over van BaseException in plaats van Exception en erft niet langer over van concurrent.futures.CancelledError

Voltooid

asyncio.Task.get_coro() toegevoegd om de ingepakte coroutine binnen een asyncio.Task op te halen

Asyncio-taken kunnen nu een naam krijgen, hetzij door het keywordargument name door te geven aan asyncio.create_task() of de event-loop-methode create_task(), hetzij door de methode set_name() op het taakobject aan te roepen

Ondersteuning toegevoegd voor Happy Eyeballs aan asyncio.loop.create_connection(). Om het gedrag te specificeren zijn twee nieuwe parameters toegevoegd: happy_eyeballs_delay en interleave.

gc

get_objects() kan nu een optionele generation-parameter ontvangen die een generatie aangeeft waaruit objecten moeten worden opgehaald. (Merk echter op dat hoewel gc ingebouwd is, get_objects() niet is geïmplementeerd voor MicroPython)

math

Nieuwe functie math.dist() toegevoegd voor het berekenen van de euclidische afstand tussen twee punten

De functie math.hypot() uitgebreid om meerdere dimensies aan te kunnen

Nieuwe functie math.prod() toegevoegd, als analoog aan sum(), die het product retourneert van een “start”-waarde (standaard: 1) maal een iterabele van getallen

Twee nieuwe combinatorische functies math.perm() en math.comb() toegevoegd

Een nieuwe functie math.isqrt() toegevoegd voor het berekenen van nauwkeurige gehele vierkantswortels zonder conversie naar floating point

De functie math.factorial() accepteert niet langer argumenten die niet int-achtig zijn

Voltooid

sys

Nieuwe functie sys.unraisablehook() toegevoegd, die kan worden overschreven om te bepalen hoe “unraisable exceptions” worden afgehandeld