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 |
|
Positie-only argumenten |
||
Toewijzingsexpressies |
Voltooid |
|
Pickle-protocol 5 met out-of-band-data |
||
Runtime-audithooks |
||
Python-initialisatieconfiguratie |
||
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.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. |
|
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) |
|
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 |
Nieuwe functie sys.unraisablehook() toegevoegd, die kan worden overschreven om te bepalen hoe “unraisable exceptions” worden afgehandeld |
|