Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 2 z 410/36 w kursie~10 min
Lekcje modułu (2/4)

Tuple i unpacking

Krotka (tuple) to uporządkowana i niemodyfikowalna (immutable) sekwencja elementów: po jej utworzeniu nie można już zmienić jej zawartości. Zapisuje się ją w nawiasach okrągłych (chociaż tym, co faktycznie ją definiuje, jest przecinek).

Tworzenie krotki

Python
vuota = ()
una = (42,)             # UWAGA: bez przecinka, (42) to po prostu liczba 42 w nawiasie
coords = (10, 20)
mista = ("Ada", 36, True)

Dostęp przez indeksy oraz wycinanie (slicing) działają dokładnie tak samo jak dla list: coords[0], coords[-1], mista[:2].

Kiedy używać krotki zamiast listy

  • Gdy wartość reprezentuje stałą kolekcję, która nie powinna się zmieniać (współrzędne, data w formacie (rok, miesiąc, dzień), wersja (1, 2, 3)).
  • Gdy musisz użyć wartości jako klucza słownika lub elementu zbioru (set): dopuszczalne są tylko obiekty niemodyfikowalne (hashowalne).
  • Gdy chcesz zasygnalizować czytelnikowi kodu, że dana wartość jest "zamrożona".

Rozpakowywanie (unpacking): funkcja, która zmienia sposób pisania w Pythonie

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

Działa to również bez nawiasów (to przecinek definiuje krotkę):

Python
x, y = 10, 20

Pozwala to także na zamianę wartości zmiennych bez użycia zmiennej tymczasowej, co jest typowym pythonowym idiomem:

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

Rozpakowywanie z użyciem * (reszta)

Gdy chcesz przechwycić "pierwszy element i resztę" lub "pierwszy, ostatni i elementy środkowe":

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

Jest to tak zwane przypisanie z gwiazdką (starred assignment): gwiazdka zbiera wszystkie pozostałe elementy do listy.

Pułapka krotki jednoelementowej

Zapis (42) nie tworzy krotki, lecz zwykłą liczbę całkowitą 42 w nawiasach. Aby stworzyć krotkę z jednym elementem, musisz dodać przecinek: (42,). Bez niego dalsze operacje mogą zakończyć się nieoczekiwanym błędem.

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

Krotki jednoelementowe

Aby utworzyć krotkę zawierającą tylko jeden element, same nawiasy nie wystarczą: musisz wstawić przecinek na końcu, na przykład t = (42,). Bez przecinka Python traktuje nawiasy jako zwykłe grupowanie matematyczne, tworząc zwykłą liczbę całkowitą 42.

Spróbuj sam

Ćwiczenie#python.m3.l2.e1
Próby: 0Ładowanie...

Mając dane `a = 1` oraz `b = 2`, zamień ich wartości w jednej linii (rozpakowywanie krotki) i oceń krotkę (a, b).

Ładowanie edytora...
Pokaż wskazówkę

a, b = b, a

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m3.l2.e2
Próby: 0Ładowanie...

Z listy `voti = [7, 5, 8, 6, 9]`, użyj rozpakowywania, aby wyodrębnić pierwszą ocenę do `primo`, ostatnią do `ultimo`, a pozostałe do `centro`. Oceń `(primo, centro, ultimo)`.

Ładowanie edytora...
Pokaż wskazówkę

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m3.l2.e3
Próby: 0Ładowanie...

Mając daną krotkę `point = (4, 5, 6)`, użyj rozpakowywania, aby przypisać jej trzy wartości odpowiednio do zmiennych `x`, `y`, `z`. Następnie oblicz sumę `x`, `y` oraz `z` i zapisz ją w zmiennej `coord_sum`. Na koniec oceń `coord_sum`.

Ładowanie edytora...
Pokaż wskazówkę

Użyj zapisu x, y, z = point, aby rozpakować trzy współrzędne w jednej instrukcji.

Rozwiązanie dostępne po 3 próbach