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ć.
| list | tuple | |
|---|---|---|
| Składnia | [1, 2, 3] | (1, 2, 3) |
| Czy oszukujemy? | Tak | nie |
| Indeksowanie, wycinki, len, in | Tak | Tak |
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
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