Python 3.9

Python 3.9.0 (final) został wydany 5 października 2020 r. Funkcje dla wersji 3.9 są zdefiniowane w PEP 596, a szczegółowy opis zmian można znaleźć w What’s New in Python 3.9

Funkcje

Status

PEP 573

Szybki dostęp do stanu modułu z metod typów rozszerzeń C

Nieistotne

PEP 584

Operatory sumy zbiorów dodane do dict

Ukończone [1]

PEP 585

Podpowiedzi typów generycznych w standardowych kolekcjach

PEP 593

Elastyczne adnotacje funkcji i zmiennych

PEP 602

CPython przyjmuje roczny cykl wydań. Zamiast rocznego, dążąc do dwumiesięcznego cyklu wydań

Nieistotne

PEP 614

Złagodzone ograniczenia gramatyczne dotyczące dekoratorów

PEP 615

Baza danych stref czasowych IANA jest teraz obecna w bibliotece standardowej w module zoneinfo

PEP 616

Metody napisów do usuwania przedrostków i przyrostków

PEP 617

CPython używa teraz nowego parsera opartego na PEG

Nieistotne

Inne zmiany w języku:

__import__() zgłasza teraz ImportError zamiast ValueError

Ukończone

Python pobiera teraz ścieżkę bezwzględną nazwy pliku skryptu określonej w wierszu poleceń (np.: python3 script.py): atrybut __file__ modułu __main__ stał się ścieżką bezwzględną, a nie względną

Domyślnie, dla najlepszej wydajności, argument errors jest sprawdzany tylko przy pierwszym błędzie kodowania/dekodowania, a argument encoding jest czasami ignorowany dla pustych napisów

„”.replace(„”, s, n) zwraca teraz s zamiast pustego napisu dla wszystkich niezerowych n. Jest to teraz zgodne z „”.replace(„”, s)

Każde poprawne wyrażenie może być teraz użyte jako dekorator. Wcześniej gramatyka była znacznie bardziej restrykcyjna

Równoległe uruchamianie aclose() / asend() / athrow() jest teraz zabronione, a ag_running odzwierciedla teraz rzeczywisty status działania generatora asynchronicznego

Nieoczekiwane błędy podczas wywoływania metody __iter__ nie są już maskowane przez TypeError w operatorze in oraz w funkcjach contains(), indexOf() i countOf() modułu operator

Wyrażenia lambda bez nawiasów nie mogą już być częścią wyrażenia w klauzuli if w wyrażeniach listowych i wyrażeniach generatorowych

Zmiany w modułach wbudowanych:

asyncio

Ze względu na istotne obawy dotyczące bezpieczeństwa parametr reuse_address funkcji asyncio.loop.create_datagram_endpoint() nie jest już obsługiwany

Dodano nową korutynę shutdown_default_executor(), która planuje zamknięcie domyślnego executora oczekującego na zakończenie zamykania ThreadPoolExecutor. Ponadto zaktualizowano asyncio.run(), aby używał nowej korutyny.

Dodano asyncio.PidfdChildWatcher, specyficzną dla Linuksa implementację obserwatora procesów potomnych, która odpytuje deskryptory plików procesów

dodano nową coroutine asyncio.to_thread()

Podczas anulowania zadania z powodu przekroczenia limitu czasu asyncio.wait_for() będzie teraz czekać, aż anulowanie zostanie zakończone także w przypadku, gdy limit czasu wynosi <= 0, podobnie jak ma to miejsce przy dodatnich limitach czasu

asyncio zgłasza teraz TyperError podczas wywoływania niezgodnych metod z gniazdem ssl.SSLSocket

gc

Odzyskiwanie pamięci nie blokuje się na wskrzeszonych obiektach

Dodano nową funkcję gc.is_finalized() do sprawdzania, czy obiekt został sfinalizowany przez mechanizm odzyskiwania pamięci

math

Rozszerzono funkcję math.gcd() o obsługę wielu argumentów. Wcześniej obsługiwała tylko dwa argumenty

Dodano math.lcm(): zwraca najmniejszą wspólną wielokrotność podanych argumentów

Dodano math.nextafter(): zwraca następną wartość zmiennoprzecinkową po x w kierunku y

Dodano math.ulp(): zwraca wartość najmniej znaczącego bitu liczby zmiennoprzecinkowej

os

Udostępniono specyficzne dla Linuksa os.pidfd_open() i os.P_PIDFD

Funkcja os.unsetenv() jest teraz dostępna także w systemie Windows

Ukończone

Funkcje os.putenv() i os.unsetenv() są teraz zawsze dostępne

Ukończone

Dodano funkcję os.waitstatus_to_exitcode(): konwertuje status oczekiwania na kod wyjścia

random

Dodano nową metodę random.Random.randbytes: generuje losowe bajty

sys

Dodano nowy atrybut sys.platlibdir: nazwa specyficznego dla platformy katalogu bibliotek

Wcześniej sys.stderr był buforowany blokowo, gdy nie był interaktywny. Teraz stderr domyślnie jest zawsze buforowany liniowo

Uwagi