Python 3.8

Python 3.8.0 (final) släpptes den 14 oktober 2019. Funktionerna för 3.8 definieras i PEP 569 och en detaljerad beskrivning av ändringarna finns i What’s New in Python 3.8.

Funktioner

Status

PEP 570

Enbart positionella argument

PEP 572

Tilldelningsuttryck

Klar

PEP 574

Pickle-protokoll 5 med out-of-band-data

PEP 578

Granskningshakar vid körning

PEP 587

Konfiguration av Python-initialisering

PEP 590

Vectorcall: ett snabbt anropsprotokoll för CPython

Diverse

f-strängar stöder = för självdokumenterande uttryck och felsökning

Klar

Övriga språkändringar:

En continue-sats var otillåten i finally-klausulen på grund av ett problem med implementeringen. I Python 3.8 togs denna begränsning bort

Klar

Typerna bool, int och fractions.Fraction har nu en metod as_integer_ratio() likt den som finns i float och decimal.Decimal

Konstruktorerna för int, float och complex använder nu specialmetoden __index__(), om den finns tillgänglig och motsvarande metod __int__(), __float__() eller __complex__() inte finns tillgänglig

Lade till stöd för N{name}-escaper i reguljära uttryck

Dict och dictviews är nu itererbara i omvänd insättningsordning med reversed()

Syntaxen som tillåts för nyckelordsnamn i funktionsanrop begränsades ytterligare. I synnerhet är f((keyword)=arg) inte längre tillåtet

Generaliserad uppackning av itererbara objekt i yield- och return-satser kräver inte längre omslutande parenteser

När ett kommatecken saknas i kod som [(10, 20) (30, 40)] visar kompilatorn en SyntaxWarning med ett hjälpsamt förslag

Aritmetiska operationer mellan underklasser av datetime.date eller datetime.datetime och datetime.timedelta-objekt returnerar nu en instans av underklassen i stället för basklassen

När Python-tolken avbryts av Ctrl-C (SIGINT) och det resulterande KeyboardInterrupt-undantaget inte fångas, avslutas Python-processen nu via en SIGINT-signal eller med rätt slutkod så att den anropande processen kan upptäcka att den dog på grund av ett Ctrl-C

Vissa avancerade programmeringsstilar kräver uppdatering av types.CodeType-objektet för en befintlig funktion

För heltal tillåter nu treargumentsformen av funktionen pow() att exponenten är negativ i de fall basen är relativt prim till modulen

Dict comprehensions har synkroniserats med dict-literaler så att nyckeln beräknas först och värdet sedan

Metoden object.__reduce__() kan nu returnera en tupel som är mellan två och sex element lång

Ändringar i inbyggda moduler:

asyncio

asyncio.run() har gått från det provisoriska till det stabila API:et

Klar

Att köra python -m asyncio startar en inbyggt asynkron REPL

Undantaget asyncio.CancelledError ärver nu från BaseException i stället för Exception och ärver inte längre från concurrent.futures.CancelledError

Klar

Lade till asyncio.Task.get_coro() för att hämta den inkapslade coroutinen i en asyncio.Task

Asyncio-uppgifter kan nu namnges, antingen genom att skicka nyckelordsargumentet name till asyncio.create_task() eller händelsesloopmetoden create_task(), eller genom att anropa metoden set_name() på uppgiftsobjektet

Lade till stöd för Happy Eyeballs i asyncio.loop.create_connection(). För att specificera beteendet har två nya parametrar lagts till: happy_eyeballs_delay och interleave.

gc

get_objects() kan nu ta emot en valfri generation-parameter som anger vilken generation objekt ska hämtas från. (Observera dock att även om gc är inbyggd, är get_objects() inte implementerad för MicroPython)

math

Lade till den nya funktionen math.dist() för att beräkna euklidiskt avstånd mellan två punkter

Utökade funktionen math.hypot() för att hantera flera dimensioner

Lade till den nya funktionen math.prod(), som en motsvarighet till sum() som returnerar produkten av ett ”start”-värde (standard: 1) gånger ett itererbart objekt av tal

Lade till två nya kombinatoriska funktioner math.perm() och math.comb()

Lade till en ny funktion math.isqrt() för att beräkna exakta heltalskvadratrötter utan konvertering till flyttal

Funktionen math.factorial() accepterar inte längre argument som inte är int-liknande

Klar

sys

Lade till den nya funktionen sys.unraisablehook() som kan åsidosättas för att styra hur ”unraisable exceptions” hanteras