Python 3.9

Python 3.9.0 (final) släpptes den 5 oktober 2020. Funktionerna för 3.9 definieras i PEP 596 och en detaljerad beskrivning av ändringarna finns i What’s New in Python 3.9

Funktioner

Status

PEP 573

Snabb åtkomst till modultillstånd från metoder i C-utökningstyper

Inte relevant

PEP 584

Union-operatorer tillagda i dict

Klar [1]

PEP 585

Typtipsning av generics i standardsamlingar

PEP 593

Flexibla funktions- och variabelannoteringar

PEP 602

CPython inför en årlig utgivningscykel. I stället för årligen, med målet om en utgivningscykel på två månader

Inte relevant

PEP 614

Uppmjukade grammatikbegränsningar för dekoratorer

PEP 615

IANA:s tidszonsdatabas finns nu i standardbiblioteket i modulen zoneinfo

PEP 616

Strängmetoder för att ta bort prefix och suffix

PEP 617

CPython använder nu en ny parser baserad på PEG

Inte relevant

Övriga språkändringar:

__import__() ger nu ImportError i stället för ValueError

Klar

Python hämtar nu den absoluta sökvägen för det skriptfilnamn som anges på kommandoraden (t.ex.: python3 script.py): attributet __file__ för modulen __main__ blev en absolut sökväg i stället för en relativ sökväg

Som standard, för bästa prestanda, kontrolleras errors-argumentet endast vid det första kodnings-/avkodningsfelet och encoding-argumentet ignoreras ibland för tomma strängar

””.replace(””, s, n) returnerar nu s i stället för en tom sträng för alla n som inte är noll. Det är nu konsekvent med ””.replace(””, s)

Vilket giltigt uttryck som helst kan nu användas som en dekorator. Tidigare var grammatiken mycket mer restriktiv

Parallell körning av aclose() / asend() / athrow() är nu förbjuden, och ag_running återspeglar nu det faktiska körningstillståndet för den asynkrona generatorn

Oväntade fel vid anrop av metoden __iter__ maskeras inte längre av TypeError i in-operatorn och funktionerna contains(), indexOf() och countOf() i operator-modulen

Lambda-uttryck utan parenteser kan inte längre vara uttrycksdelen i en if-klausul i comprehensions och generatoruttryck

Ändringar i inbyggda moduler:

asyncio

På grund av betydande säkerhetsproblem stöds parametern reuse_address för asyncio.loop.create_datagram_endpoint() inte längre

Lade till en ny coroutine shutdown_default_executor() som schemalägger en nedstängning av standardexekveraren som väntar på att ThreadPoolExecutor ska bli klar med att stänga. Dessutom har asyncio.run() uppdaterats för att använda den nya coroutinen.

Lade till asyncio.PidfdChildWatcher, en Linux-specifik implementering av barnprocessbevakare som pollar processfildeskriptorer

lade till en ny coroutine asyncio.to_thread()

Vid avbrytning av uppgiften på grund av en timeout väntar asyncio.wait_for() nu tills avbrytningen är klar även i det fall då timeout är <= 0, precis som den gör med positiva timeouts

asyncio ger nu TyperError när inkompatibla metoder anropas med en ssl.SSLSocket-socket

gc

Skräpinsamling blockerar inte på återuppståndna objekt

Lade till en ny funktion gc.is_finalized() för att kontrollera om ett objekt har finaliserats av skräpsamlaren

math

Utökade funktionen math.gcd() för att hantera flera argument. Tidigare stödde den endast två argument

Lade till math.lcm(): returnerar minsta gemensamma multipel av angivna argument

Lade till math.nextafter(): returnerar nästa flyttalsvärde efter x i riktning mot y

Lade till math.ulp(): returnerar värdet av den minst signifikanta biten i ett flyttal

os

Exponerade de Linux-specifika os.pidfd_open() och os.P_PIDFD

Funktionen os.unsetenv() är nu även tillgänglig på Windows

Klar

Funktionerna os.putenv() och os.unsetenv() är nu alltid tillgängliga

Klar

Lade till funktionen os.waitstatus_to_exitcode(): konverterar en väntstatus till en slutkod

random

Lade till en ny metod random.Random.randbytes: genererar slumpmässiga byte

sys

Lade till ett nytt attribut sys.platlibdir: namnet på den plattformsspecifika biblioteksskatalogen

Tidigare var sys.stderr blockbuffrad när den var icke-interaktiv. Nu är stderr som standard alltid radbuffrad

Anteckningar