Krotka jest to kolekcja prostych obiektów. W działaniu przypominają listę, jednak ich elementy nie mogą być zmienione w miejscu. Co warto wiedzieć o tym skądinąd dość popularnym typie obiektów w Pythonie?
Charakterystyka krotek
Co warto wiedzieć o krotkach w Pythonie?
- są to obiekty uporządkowane, czyli zachowujące kolejność elementów od lewej do prawej strony,
- zapewniają dostęp do elementów poprzez wartość przesunięcia,
- są sekwencjami niemutowalnymi, a więc nie można zmieniać ich miejscu,
- mogą przechowywać różne typy obiektów, w tym słowniki, listy, inne krotki, a także mogą być dowolnie zagnieżdżane,
- przechowują tablice referencji do innych obiektów, a ich indeksowanie jest bardzo szybkie.
Należy jednak zauważyć, że niemutowalność dotyczy jedynie obiektu najwyższego poziomu, czyli krotki, ponieważ mutowane elementy wewnątrz niej mogą dalej być zmieniane w miejscu. Krotki zostały stworzone po to, aby zapewnić integralność danych, jako że są to zmienne, które nie mogą być zmodyfikowane. Można je stosować również w tych strukturach danych, które wymagają zmiennych niemutowalnych, takich jak słownik.

Operacje na krotkach
Utworzenie pustej krotki:
T = ()
T = tuple('abc')
Indeksowanie, wycinek oraz długość:
>>> T[i]
>>> T[i][j]
>>> len(T)
Wyszukiwanie indeksu:
>>> T = ('abc', 1, 3)
>>> T.index(1)
1
Zliczanie:
>>> T.count(1)
1
Mnożenie
>>> T * 2
('abc', 1, 3, [0, 2], 'abc', 1, 3, [0, 2])
Dodawanie
>>> T + (0, 2)
('abc', 1, 3, [0, 2], 0, 2)
Jak utworzyć kratkę jednoelementową?
Jeśli chcemy utworzyć krotkę składającą się z jednego elementu, nie wystarczy umieszczenie jej w nawiasach – należy dodać na końcu przecinek. Inaczej zmienna zostanie zinterpretowana na przykład jako zwykła liczba całkowita.
>>> T = (3)
>>> type(T)
<class 'int'>
>>> T = (3, )
>>> type(T)
<class 'tuple'>
Jak widać, krotki mają podobne metody do metod list, a do tego krotek można używać w podobnych wyrażeniach. Jednak nie wszystkie operacje charakterystyczne dla list są dozwolone dla krotek. Na przykład sortowanie krotki wymaga przekonwertowania jej najpierw na listę, następnie wykorzystania metody sortującej i z powrotem zmiany na krotkę. Alternatywę stanowi skorzystanie z wbudowanej funkcji sorted(), która zwraca jednak listę, zatem konwersja będzie dalej potrzebna:
>>> T = (1, 3, 2)
>>> L = list(T)
>>> L.sort()
>>> T = tuple(L)
>>> print(T)
(1, 2, 3)
>>> T = (1, 3, 2)
>>> sorted(T)
[1, 2, 3]
>>> type(sorted(T))
<class 'list'>
Nazwane kratki (namedtuples)
Istnieje odmiana krotek, która zapewnia dostęp do w poszczególnych pól za pomocą zarówno pozycji, jak i nazwy. Jest to tzw. named tuple, czyli nazwana krotka, która jest dostępna w module collections. Chcąc jej użyć, należy zatem wcześniej ją zaimportować.
>>> from collections import namedtuple
>>> record = namedtuple('record', ['name', 'version'])
>>> python = record('Python', version=3.9)
Dostęp do pól rekordów odbywa się zarówno za pomocą pozycji, jak i nazwy:
>>> python[0]
'Python'
>>> python.version
3.9
Named tuple – jak to działa?
Krotki nazwane to tak naprawdę klasa, na podstawie której tworzy się nowe obiekty. Nazwane krotki rozszerzają podstawowy typ kropki poprzez dodanie do nich metody property, która odwzorowuje nazwę pola na jego pozycję. Namedtuple mogą być przydatne wtedy, gdy chcemy uzyskać dostęp do pól zarówno za pomocą nazwy, jakiej pozycji. Mogą one jednak nie być aż tak wydajne jak zwykłe krotki, a poza tym wymagają kilku dodatkowych linijek kodu.
To tyle na temat krotek – na początek wystarczająco 😉
W kolejnym poście skupimy się na plikach.
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.