Jakie zmiany w Python 3.9

Jakie zmiany w Python 3.9

Poziom trudności
1/5

Jedni czekają na niego z niecierpliwością, inni nie wiedzą, że zbliża się do nas wielkimi krokami. Python 3.9, co o nim wiemy na dzień, dzisiejszy? W tym update’cie, programiści skupili się na słownikach i listach. W tej chwili dostępna jest wersja Python 3.9.0rc1 (rc – release candidate: co oznacza, że jest to kandydat do wydania numer 1). Ostateczna wersja ma ujrzeć światło dzienne 5 października.

Aktualizowanie i scalanie słowników

Jedną z ciekawszych funkcjonalnością będzie wprowadzenie nowej formuły scalania i aktualizacji słowników. W 3.9 znajdą się, operatory scal (|) i aktualizuj (| =) zostały dodane do wbudowanej klasy dict.

Zacznijmy od aktualizacji, gdyż, będzie można nim zastąpić wprost metodę update. Metoda update, służy do aktualizacji słowników, czyli dodawanie nowych danych lub zmianę już istniejących. Poniższy kod odwzorowuje dokładnie działanie a.update(b). Uzyskamy w ten sposób połączenie danych ze słownika, a i słownika b. Z tym że wartości w powtarzających się kluczach z obu słowników zostaną zastąpione wartościami ze słownika b (czyli słownika, którym aktualizujemy):

  1. a = {"new1": 1, "new2": 2, "new3": 3}
  2. b = {"1": "one", "2": "two", "new3": "tree"}
  3. a.update(b)
  4. print("method update: ", a)
  5. a = {"new1": 1, "new2": 2, "new3": 3}
  6. b = {"1": "one", "2": "two", "new3": "tree"}
  7. a |= b
  8. print("operator update: ", a)
method update: {'new1': 1, 'new2': 2, 'new3': 'tree', '1': 'one', '2': 'two'}
operator update: {'new1': 1, 'new2': 2, 'new3': 'tree', '1': 'one', '2': 'two'}

Scalanie jest praktycznie aktualizowaniem lecz wymaga dodatkowej zmiennej, aby do niej zapisać wynik. W przykładzie poniżej użyłem zmiennej c. Wynik c będzie taki sam jak dla przypadków powyżej. W odróżnieniu od aktualizowania, nie wpływa on w żaden sposób na scalane słowniki:

  1. a = {"new1": 1, "new2": 2, "new3": 3}
  2. b = {"1": "one", "2": "two", "new3": "tree"}
  3. c = a | b
  4. print("operator merge:", c)
operator merge: {'new1': 1, 'new2': 2, 'new3': 'tree', '1': 'one', '2': 'two'}

Nowe funkcjonalności są dość intuicyjne i choć nie wprowadzają niesamowicie nowatorskich zmian, to znacznie może poprawić jego czytelność.

Nowe metody łańcucha znaków

Kolejna nowa funkcjonalność to bardziej czytelne obcinanie początków, jak i końców ciągów znaków. Nowe metody removeprefix (usuwanie początku string’a) i removesuffix (usuwanie końca string’a). Będą one zastępować z powodzeniem dużą część operacji typu [6:] czy [:9], mogących kończyć się nieoczekiwaną losowością. Unikniemy losowości dzięki nowym metodą. Zacznijmy więc od usunięcia niepożądanych znaków „zxcv” z początku i końca łańcucha znaków:

  1. a = "zxcvStringzxcv"
  2. print(a)
  3. a = a.removeprefix("zxcv")
  4. print(a)
  5. a = a.removesuffix("zxcv")
  6. print(a)

Na poniższych wynikach widzimy jak kolejno usuwamy najpierw niepożądany prefiks a następnie sufiks (zxcv), pozostawiając jedynie słowo String

zxcvStringzxcv
Stringzxcv
String

Same metody nie wpływa na ciąg znaków, należy ich wynik przypisać do zmiennej. Gdy spróbujemy usunąć nieistniejący początek lub koniec string’a, nie wpłynie to na niego w żaden sposób. Niestety Python też nie wyrzuci nam błędu o nieudanej operacji, co według mnie byłoby pożądane w tej funkcjonalności.

Powiększenie funkcji wbudowanych o listy

Jeżeli chciałeś w poprzedniej wersji Pythona typować argument metody jako listę, musiałeś zaimportować z biblioteki typing klasę List. A następnie użyć jej jako typ argumentu (w przykładzie old_method poniżej). W najnowszej wersji dostępna lista będzie dostępna jako funkcja wbudowana list (w przykładzie jako new_method), więc nie będzie potrzeby importowania dodatkowych bibliotek:

  1. from typing import List
  2. def old_method(a: List[str]):
  3. print(a)
  4. def new_method(a: list[str]):
  5. print(a)

W ostatecznej wersji pojawi się pewnie więcej pomniejszych feature’ów i poprawek, ale te trzy powyższe mogą wpłynąć na wasz kod najbardziej. Jeśli nie diametralnie go zmieniając, to chociaż sprawiają, że jest bardziej czytelny. Aktualny stan, w jakim znajduje się Python 3.9, znajdziesz na stronie twórców Pythona:

Jakie zmiany w Python 3.9 image

Dodaj komentarz