Menu

Krotki w Pythonie (tuple): niemodyfikowalne sekwencje, rozpakowanie i namedtuple

Kiedy sięgać po krotkę zamiast listy: niemodyfikowalność, rozpakowanie, krotki nazwane i sytuacje, do których krotki zostały stworzone.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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.

  1. Bezpieczeństwo. Krotki przekazanej do funkcji nikt nie zmieni za twoimi plecami.
  2. Hashowalność. Krotek z niemodyfikowalnymi wartościami można używać jako kluczy słownika albo elementów zbioru; list nie.
  3. 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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ