Rozdział 11 · Mnóstwo informacji!

Krotki

Prawie lista, ale niezmienny – i dlatego czasem jest lepszym wyborem.

Poprowadzenie (tuple) nie jest „lista w kółko nawiasy”

kortezhi.py
point = (10, 20)
print(point)
print(point[0])   #10 – indeksowanie działa jak listy
kortezh_nelzya_menyat.py
point = (10, 20)
point[0] = 99   # TypeError: 'tuple' object does not support item assignment

Krotka — sekwencja, tak jak lista

len, indeksowanie, cięcia, siła brute, in — wszystko to działa dla krotki tak samo jak dla listy (§11.1–§11.2). Jest tylko jedna różnica, ale Zasada: Krotki nie można zmienić.

listtuple
Składnia[1, 2, 3](1, 2, 3)
Czy oszukujemy?Taknie
Indeksowanie, wycinki, len, inTakTak

Pojedyncza krotka – potrzebny jest przecinek

odinochnyj_kortezh.py
not_a_tuple = (42)
print(type(not_a_tuple))   # <class 'int'>

one = (42,)
print(type(one))            # <class 'tuple'>
Krotka powstaje przez przecinek, a nie nawiasy
(42) — to po prostu liczba 42 w nawiasach, jak w matematyce. Krotką czyni przecinek: (42,). Bez przecinka Python nie zorientuje się, że chcesz mieć krotkę, i cicho utworzy liczbę regularną — bez błędu, co jest szczególnie podstępne.

Packing i unpacking

packing.py
point = 10, 20   nawiasy # są opcjonalne – Python „pakuje”
print(point, type(point))
raspakovka.py
point = (10, 20)
x, y = point
print(x, y)   # 10 20
point = (10, 20)x10y20
x, y = point - Rozpakowanie: Liczba nazw musi odpowiadać liczbie wartości
Już użyliśmy rozpakowywania
artist.position() w module turtle zwraca dokładnie taki krotkę (x, y) możesz od razu rozłożyć go na dwie zmienne.

Klasyczny trik: Wymiana wartości

swap.py
a = 1
b = 2
a, b = b, a
print(a, b)   # 2 1

Działa dzięki tej samej parze „packing + unpacking” (b, a)to jest rozpakowane w a, b — bez zmiennej pośredniej.

Star Unboxing

star_unpacking.py
first, *middle, last = [1, 2, 3, 4, 5]
print(first)    # 1
print(middle)   # [2, 3, 4]
print(last)     # 5
Star zbiera „wszystko inne”
*middle bierze wszystkie wartości, które nie są parsowane innymi nazwami, i pakuje je do zwykłego lista — nawet jeśli krotka jest rozpakowana.

Funkcje mogą zwracać wiele wartości jednocześnie

divmod_primer.py
quotient, remainder = divmod(17, 5)
print(quotient, remainder)   # 3 2

divmod() z rozdziału 4 w rzeczywistości zwraca jedną krotkę (3, 2) — rozkładamy to na dwie zmienne jednocześnie.

Niuanse: Krotka może zawierać obiekty zmienne

tuple_s_listom.py
t = ([1, 2], [3, 4])
t[0].append(99)
print(t)   # ([1, 2, 99], [3, 4]) – udało się!
Niezmienność krotki dotyczy tylko samych „komórek”
t[0] = [...] (zamienić link na inny lista) — zabronione. A oto t[0].append(99) (zmiana samego lista, do którego odnosi się krotka) jest dozwolona: krotka nie pozwala na przeorganizowanie TEGO, co przechowuje dla każdej pozycji, ale nie zabrania zmianie obiektów zmiennych wewnątrz.
Praktyka: krotki i rozpakowywanie
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →