Krotka to lista, której nie można zmienić
Na pierwszy rzut oka krotki i listy wyglądają podobnie: obie są uporządkowanymi sekwencjami, obie obsługują indeksowanie i iterację. Jedna kluczowa różnica zmienia jednak wszystko: krotki są niemodyfikowalne. Gdy utworzysz krotkę, nie możesz do niej nic dodać, nic z niej usunąć ani podmienić elementu.
Krotki zapisujesz w nawiasach okrągłych (a czasem bez nich):
Krotka z jednym elementem wymaga przecinka na końcu, inaczej Python potraktuje nawiasy jako zwykłe grupowanie:
A dla pustych krotek użyj ():
Niemodyfikowalność w praktyce
Spróbuj zmienić krotkę, a Python cię zatrzyma:
Z krotki możesz swobodnie czytać (indeksowanie, wycinki, iteracja, in), ale nie możesz jej zmieniać. Jeśli potrzebujesz innej krotki, tworzysz nową.
Po co komu coś, czego nie można zmienić?
Niemodyfikowalność brzmi jak ograniczenie, ale często to właśnie ta cecha, której chcesz.
- Bezpieczeństwo. Krotki przekazanej do funkcji nikt nie zmieni za twoimi plecami.
- Hashowalność. Krotek z niemodyfikowalnymi wartościami można używać jako kluczy słownika albo elementów zbioru; list nie.
- Intencja. Krotka mówi "to rekord o stałym kształcie".
point = (3, 4)komunikuje "dwie współrzędne" jaśniej niżpoint = [3, 4].
Krotki błyszczą w takich zastosowaniach jak:
- Współrzędne:
(x, y),(lat, lon) - Kolory RGB:
(255, 128, 0) - Rekordy:
(name, email, signup_date) - Zwracanie wielu wartości z funkcji
Rozpakowanie
Krotki i składnia rozpakowania są dla siebie stworzone:
Rozpakowanie wykonuje przecinek po lewej stronie. Python widzi dwie nazwy i krotkę z dwiema wartościami, więc przypisuje je parami.
W idiomatycznym Pythonie jest to wszędzie:
Możesz użyć *, żeby zebrać "resztę":
Przydaje się, gdy interesuje cię tylko pierwszy i ostatni element.
Krotki jako klucze słownika
Ponieważ krotki są hashowalne (o ile ich zawartość też jest), możesz używać ich jako kluczy słownika. Listy tego nie potrafią:
Ten wzorzec, czyli klucz złożony z kilku wartości, jest zaskakująco przydatny. Pomyśl: "wynik użytkownika X w dniu Y" albo "najlepsza trasa z A do B".
Krotki do zwracania wielu wartości
Funkcja, która musi zwrócić więcej niż jedną rzecz, zwykle zwraca krotkę:
Wbudowana funkcja Pythona divmod() robi dokładnie to samo. Dzięki rozpakowaniu w kodzie wywołującym czyta się to naturalnie.
Krotki nazwane, gdy pozycja nie wystarcza
Gdy krotki mają więcej niż dwa lub trzy elementy, pamiętanie, co oznacza która pozycja, robi się męczące. Rozwiązuje to collections.namedtuple:
Teraz elementy krotki mają nazwy. To nadal niemodyfikowalna krotka (więc rozpakowanie i indeksowanie działają), ale dostęp jest dużo wygodniejszy. Do bardziej złożonych przypadków są dataclasses, które poznamy później w rozdziale o klasach.
Krotka czy lista: szybki przewodnik
- Stały kształt, każda pozycja coś znaczy → krotka.
- Kolekcja, która może rosnąć albo się kurczyć → lista.
- Zwracanie wielu wartości z funkcji → krotka.
- Potrzebujesz klucza słownika albo elementu zbioru → krotka (lista nie zadziała).
- Zamierzasz ją zmieniać → lista (krotka na to nie pozwoli).
Co dalej
Krotki obejmują jeden koniec spektrum: stałe, małe, uporządkowane. Dalej zbiory, które wykonują zupełnie inne zadanie: szybkie sprawdzanie przynależności i unikalność.
Najczęściej zadawane pytania
Czym jest krotka w Pythonie?
Krotka (tuple) to uporządkowana, niemodyfikowalna sekwencja: podobna do listy, ale po utworzeniu nie da się dodawać, usuwać ani zmieniać jej elementów. Krotki zapisuje się w nawiasach okrągłych: point = (3, 4).
Czym różni się krotka od listy?
Obie są uporządkowanymi sekwencjami. Listy są modyfikowalne, więc możesz je zmieniać po utworzeniu, a krotki są niemodyfikowalne. Krotek zwykle używa się do małych zestawów wartości, które razem tworzą jeden "rekord", na przykład współrzędne albo kilka wartości zwracanych przez funkcję.
Kiedy używać krotki?
Używaj krotki, gdy masz rekord o stałym rozmiarze, w którym każda pozycja coś znaczy: współrzędne, kolory RGB, wiersz z bazy danych. Krotek używa się też jako kluczy słownika albo elementów zbioru, bo list nie da się tam użyć. We wszystkich innych przypadkach, gdy kolekcja może rosnąć albo się kurczyć, domyślnym wyborem jest lista.