Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Python 3.9 został oficjalnie wydany

Twórcy Pythona podzielili się właśnie wersją 3.9, która zawiera takie usprawnienia, jak operator unii w słownikach oraz liczne nowości, poprawiające wydajność języka.
Python 3.9 został oficjalnie wydany

Kilka miesięcy temu zapowiadaliśmy Pythona 3.9, prezentując kilka nadchodzących funkcji. Teraz nowa wersja została oficjalnie wydana, więc jest to dobra okazja do pokazania czegoś więcej. Nie zwlekając już więc, spójrzmy, co oficjalnie zmieniło się w Pythonie.


Zmiana cyklu wydań

Wraz z wersją 3.9 zmienia się sposób, w jaki Python jest rozwijany i wydawany. Wcześniej każdy nowy major pojawiał się co 18 miesięcy. PEP 602 sugeruje jednak implementację corocznego cyklu wydań, co zostało właśnie zaakceptowane. Oznacza to niestety mniej funkcji, ale też szybszy feedback dotyczący ich testów. 

Zmiana cyklu wydań może również oznaczać mniej zmian, które są dla Pythona w pewien sposób rewolucyjne. Niemniej jednak może zachęci to użytkowników oraz managerów dystrybucji Linuksa do częstszego aktualizowania języka.  

Zgodnie z nowym schematem, Python 3.10 pojawi się oficjalnie w październiku 2021. 


Python stał się szybszy

Python staje się z każdym wydaniem coraz bardziej wydajny. Tym razem twórcy wprowadzili dwie duże zmiany, które zwiększają prędkość działania tej technologii, bez potrzeby wprowadzania żadnych zmian w istniejącym kodzie. 

Pierwsza zmiana zakłada użycie protokołu vectorcall na większą skalę. vectorcall został wprowadzony w wersji 3.8 i sprawia, że wiele wywołań funkcji Pythona dzieje się szybciej dzięki minimalizowaniu lub eliminacji tymczasowych obiektów, stworzonych specjalnie dla danego wywołania.  

Drugą zmianą, która da Pythonowi większą wydajność, jest nowy parser dla kodu źródłowego. Nowość ta została wprowadzona, aby rozwiązać niektóre nieścisłości wewnątrz oryginalnego parsera. Niemniej jednak istotne jest tutaj to, że parsowanie będzie o wiele szybsze, zwłaszcza jeśli chodzi o duże ilości kodu. 


Nowości w dekoratorach

Wcześniej dekoratory mogły jedynie zawierać symbol @, nazwę (np. func) oraz nazwę po kropce (np. func.method). Opcjonalnie mogło się również pojawić pojedyncze wywołanie. Wraz z Pythonem 3.9 pojawia się możliwość umieszczenia tam jakiegokolwiek wyrażenia. 

Jednym ze sposobów na ominięcie poprzednich restrykcji było utworzenie funkcji lub lambdy, która zastąpiłaby bardziej skomplikowane wyrażenie użyte jako dekorator. Obecnie każde wyrażenie tutaj zadziała, o ile, oczywiście, może się zachowywać jak dekorator. 

Oto przykład:

@button_1.clicked.connect
def eggs():
…


Powyższe można teraz zapisać jako:

@buttons[1].clicked.connect
def eggs():
...


Nowości w Type Hinting

Python ostatnio mocno rozszerzył obsługę Type Hintingu — głównie dla linterów oraz code checkerów. Nie zostają one niestety narzucone podczas uruchamiania w CPython i nie ma na razie planów, aby Python stał się językiem typowanym statycznie. Type hinting pomaga jednak zapewnić spójność w dużych bazach kodu.

Wraz z Pythonem 3.9 pojawiły się więc nowe funkcje, które poprawiają obsługę type hintingu oraz adnotacji do typów. Jedna z nich sprawia, że type hinting dla kolekcji (takich jak listy oraz słowniki) jest dostępny w Pythonie natywnie. Oznacza to, że można opisać listę jako list[int] bez potrzeby angażowania do tego specjalnej biblioteki do typowania.

Kolejną nowością jest elastyczny sposób tworzenia adnotacji do funkcji oraz kolekcji. Polega on na użyciu typu Annotated do opisania typu, korzystając z metadanych, które można wcześniej sprawdzić (przy użyciu lintingu). 


Poprawki we wnętrzu Pythona

Wraz z Pythonem 3.9 przybywa również trochę poprawek we wnętrzu języka. Po pierwsze, przemodelowany został sposób, w jaki moduły współdziałają z mechaniką do importowania. Moduły rozszerzające (napisane w C) mogą teraz korzystać z nowego mechanizmu ładowania, który sprawia, że będą się one zachowywać jak moduły napisane w Pythonie. Co więcej, powyższa nowość zezwala na nowe zachowania dotyczące hooków. 

Kolejną poprawką we wnętrzu Pythona jest stablny ABI dla CPython, który będzie kompatybilny z każdą wersją z serii 3. Wcześniej, każda nowa wersja zawierała ABI, które nie było kompatybilne z poprzednimi wersjami języka — wymagało to rekompilacji modułów rozszerzających z każdym nowym wydaniem. Oto lista modułów, które korzystają ze stabilnego ABI z wersji 3.9:

  • audioop
  • ast
  • grp
  • _hashlib
  • pwd
  • _posixsubprocess
  • random
  • select
  • struct
  • termios
  • zlib


Inne

Standardowa biblioteka Pythona obsługuje od teraz bazę danych IANA time zone. Baza ta jest dobrze utrzymywana i szeroko używana — możliwość bezpośredniego użycia jej w Pythonie zaoszczędzi więc wszystkim mnóstwo czasu. 

Co więcej, mamy też nowe metody ciągów znaków, które pozwalają na łatwe usuwanie prefiksów i sufiksów. .removeprefix() oraz .removesuffix() zwracają zmodyfikowaną kopię ciągu znaków bez danego prefiksu lub sufiksu. Jeżeli chodzi o inne zmiany, to warto też wspomnieć, że słowniki zostały wzbogacone o operator unii.

Jeżeli ktoś jest zainteresowany dokumentacją nowego wydania, to może ją znaleźć tutaj.

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej