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 | |
Enbart positionella argument | ||
Tilldelningsuttryck | Klar | |
Pickle-protokoll 5 med out-of-band-data | ||
Granskningshakar vid körning | ||
Konfiguration av Python-initialisering | ||
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.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. | |
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) | |
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 |
Lade till den nya funktionen sys.unraisablehook() som kan åsidosättas för att styra hur ”unraisable exceptions” hanteras | |