Krotki

edytuj

Krotka (ang. tuple) jest niezmienną listą. Zawartość krotki określamy tylko podczas jej tworzenia. Potem nie możemy już jej zmienić.

Przykład. Definiowanie krotki
>>> t = ("a", "b", "mpilgrim", "z", "element")    #(1)
>>> t
('a', 'b', 'mpilgrim', 'z', 'element')
>>> t[0]                                          #(2)
'a'
>>> t[-1]                                         #(3)
'element'
>>> t[1:3]                                        #(4)
('b', 'mpilgrim')
  1. Krotki definiujemy w identyczny sposób jak listę, lecz z jednym wyjątkiem -- zbiór elementów jest ograniczony w nawiasach okrągłych, zamiast w kwadratowych.
  2. Podobnie jak w listach, elementy w krotce mają określony porządek. Są one indeksowane od 0, więc pierwszym elementem w niepustej krotce jest zawsze t[0].
  3. Ujemne indeksy idą od końca krotki, tak samo jak w listach.
  4. Krotki także można wycinać. Kiedy wycinamy listę, dostajemy nową listę. Podobnie, gdy wycinamy krotkę dostajemy nową krotkę.
Przykład. Krotki posiadają mniej metod niż listy
>>> t
('a', 'b', 'mpilgrim', 'z', 'element')
>>> t.append("nowy")                                        #(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z")                                           #(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("z")                                            #(3)
3
>>> "z" in t                                                #(4)
True
  1. Nie można dodawać elementów do krotki. Krotki nie posiadają metod typu append, czy też extend.
  2. Nie można usuwać elementów z krotki. Nie posiadają one ani metody remove ani metody pop.
  3. Można wyszukiwać elementy w krotce wykorzystując metodę index.
  4. Można wykorzystać operator in, aby sprawdzić, czy krotka zawiera dany element.

To w końcu do czego są te krotki przydatne?

  • Krotki działają szybciej niż listy. Jeśli definiujemy stały zbiór wartości, który będzie używany tylko do iteracji, skorzystajmy z krotek zamiast z listy.
  • Jeśli chcielibyśmy używać danych "zabezpieczonych przed zapisem" (np. po to, żeby program był bezpieczniejszy), wykorzystajmy do tego krotki. Korzystając z krotek, zamiast z list, mamy pewność, że dane w nich zawarte nie zostaną nigdzie zmienione. To trochę tak, jakbyśmy mieli gdzieś ukrytą instrukcję assert sprawdzającą, czy dane są stałe. W przypadku, gdy nastąpi próba nadpisania pewnych wartości w krotce, program zwróci wyjątek.
  • Pamiętasz, jak powiedzieliśmy, że klucze w słowniku mogą być łańcuchami znaków, liczbami całkowitymi i "kilkoma innymi typami"? Krotki są jednym z tych "innych typów". W przeciwieństwie do list, mogą one zostać użyte jako klucz w słowniku. Dlaczego? Jest to dosyć skomplikowane. Klucze w słowniku muszą być niezmienne. Krotki same w sobie są niezmienne, jednak jeśli wewnątrz krotki znajdzie się lista, to krotka ta nie będzie mogła zostać użyta jako klucz, ponieważ lista jest zmienna. W takim przypadku krotka nie byłaby słownikowo-bezpieczna. Aby krotka mogła zostać wykorzystana jako klucz, musi ona zawierać wyłącznie łańcuchy znaków, liczby i inne słownikowo-bezpieczne krotki.
  • Krotki używane są do formatowania tekstu, co zobaczymy wkrótce.