Advent of code
Kilka dni temu rozpoczął się Advent of code. W tym roku, podobnie jak w zeszłym, wzięłam na warsztat Pythona. Odkrywam ten język właściwie na nowo - po wielu latach (i wielu nowych wydaniach) zaszło w nim wiele zmian. Oto kilka perełek, które odkryłam w trakcie rozwiązywania tegorocznych zadań:
Sortowanie topologiczne - moduł graphlib
Napisałam o sortowaniu topologicznym odrębny artykuł. Od Pythona 3.9 będzie można używać modułu graphlib.
str.format
Użycie str.format (wraz z mini-językiem) zamiast formatowania przy użyciu % (które ma dość ograniczone możliwości: %-formatownie pozwala jedynie na użycie typów int, str i double):
|
|
Ten mini-język został wprowadzony przy formatowanych literałach napisowych(PEP-498) i daje dużo swobody w wypisywaniu wartości:
|
|
set.difference
Użycie set.difference (and other set-specific operations):
|
|
Aktualizacja słownika: dict - union
Do klasy [dict] dodany został operator [union]. Istnieje kilka sposobów "łączenia" słowników, żaden z nich jednak nie wydaje się wystarczająco elegancki. W specyfikacji PEP-0584 wymmienione zostały między innymi:
Zmiana słownika w miejscu
Modyfikuje słownik d1 (tracimy oryginalne dane)
|
|
Rozpakowanie istniejących słowników
Można też utworzyć nowy słownik przy pomocy rozpakowania istniejąch słowników d1 i d2:
|
|
To rozwiązanie nie zachowuje się dobrze dla podtypów [dict] (zawsze typem rezultatu jest [dict], niezależnie od typów składowych).
collections.ChainMap
Wrapper na dwa słowniki. Problematyczny w przypadku konfliktu kluczy: stosuje zasadę "najwcześniejsza wartość wygrywa". Dodatkowo modyfikacja zmienia słownik pod spodem.
|
|
Operator union
(znak |
- “pipe”)- nowość w 3.9
Dodany w Pythonie 3.9 operator union
, który rozwiązuje konflikty kluczy we właściwy (to znaczy: najbardzej intuicyjny) sposób: ostatnia wartość
wygrywa.
|
|