2.8. Torke

Torka je nepromjenjiv, uređen niz vrijednosti. Nakon stvaranja, stavke unutar nje ne mogu se dodavati, uklanjati ni mijenjati.

2.8.1. Stvaranje torki

Koristite zagrade (ili samo zareze) za stvaranje torke:

empty   = ()
point   = (3, 4)
triple  = 1, 2, 3                # parentheses are optional
mixed   = (1, "two", 3.14)
nested  = ((1, 2), (3, 4))

2.8.1.1. Zamka s jednim elementom

Zagrade oko vrijednosti samo su zagrade; ono što zapravo čini torku jest zarez. Torka s jednim elementom treba završni zarez:

>>> (1)
1                                # just an int in parens
>>> (1,)
(1,)                             # a one-element tuple
>>> type((1)), type((1,))
(<class 'int'>, <class 'tuple'>)

2.8.2. Duljina, indeksiranje i izrezivanje

Isto kao kod listi i nizova – len(), indeksiranje, izrezivanje, in te + / * svi rade na isti način:

>>> point = (3, 4, 5)
>>> len(point)
3
>>> point[0]
3
>>> point[1:]
(4, 5)
>>> 4 in point
True
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)

2.8.3. Nepromjenjivost

Torke nemaju append, pop, sort ni bilo koju drugu metodu koja djeluje na mjestu. Indeksirano pridruživanje izaziva TypeError:

>>> point = (3, 4)
>>> point[0] = 99
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item assignment

Da biste „izmijenili” torku, izgradite novu s promijenjenim vrijednostima.

2.8.4. Raspakiravanje

Glavna supermoć torke jest raspakiravanje: pridruživanje svake stavke zasebnoj varijabli u jednoj naredbi.

Torka od tri elementa (1, 2, 3) raspakirava se u tri imenovane varijable x, y, z.

Raspakiravanje veže svaki element torke za imenovanu varijablu u jednom pridruživanju.

>>> point = (3, 4)
>>> x, y = point
>>> x
3
>>> y
4

Desna strana može biti bilo koji iterabilni objekt – lista, niz, povratna vrijednost funkcije:

>>> a, b, c = "abc"
>>> a, b, c
('a', 'b', 'c')

Vodeća * skuplja „ostatak” raspakiravanja u listu:

>>> first, *rest = [10, 20, 30, 40]
>>> first
10
>>> rest
[20, 30, 40]

2.8.5. Više povratnih vrijednosti

Funkcija može vratiti torku da bi isporučila nekoliko vrijednosti odjednom; pozivatelj ih raspakirava pri primanju:

def size_of(rect):
    return (rect[2] - rect[0], rect[3] - rect[1])

width, height = size_of((10, 20, 110, 140))
# width = 100, height = 120

Zagrade na return neobavezne su – goli return a, b također je torka.

2.8.6. Torka nasuprot listi

Praktičan vodič za to za čime posegnuti:

  • Torka za podatke fiksnog oblika, često heterogene: (x, y) točke, (r, g, b) boje, više povratnih vrijednosti, argumenti funkcije zapakirani za kasniju uporabu.

  • Lista za podatke promjenjive duljine, često homogene: lista mjerenja, red stavki za obradu, sve čemu očekujete dodavati.

Torke su također raspršive (sve dok je svaki element unutar njih raspršiv), pa se mogu koristiti kao ključevi u dict.