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 |
|