2.8. N-tice

N-tice je neměnná, uspořádaná posloupnost hodnot. Po vytvoření nelze položky uvnitř přidávat, odebírat ani měnit.

2.8.1. Vytváření n-tic

Pro vytvoření n-tice použijte závorky (nebo jen čárky):

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. Záludnost jednoprvkové n-tice

Závorky kolem hodnoty jsou jen závorky; co skutečně tvoří n-tici, je čárka. Jednoprvková n-tice potřebuje koncovou čárku:

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

2.8.2. Délka, indexování a řezy

Stejné jako u seznamů a řetězců – len(), indexování, řezy, in a + / * všechny fungují stejným způsobem:

>>> 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. Neměnnost

N-tice nemají append, pop, sort ani žádnou jinou metodu pracující na místě. Indexované přiřazení vyvolá 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

Chcete-li n-tici „upravit“, vytvořte novou se změněnými hodnotami.

2.8.4. Rozbalování

Hlavní supervlastností n-tice je rozbalování: přiřazení každé položky do samostatné proměnné v jednom příkazu.

Tříprvková n-tice (1, 2, 3) rozbalená do tří pojmenovaných proměnných x, y, z.

Rozbalování naváže každý prvek n-tice na pojmenovanou proměnnou v jednom přiřazení.

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

Pravá strana může být libovolný iterovatelný objekt – seznam, řetězec, návratová hodnota funkce:

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

Úvodní * shromáždí „zbytek“ rozbalování do seznamu:

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

2.8.5. Více návratových hodnot

Funkce může vrátit n-tici, aby najednou dodala několik hodnot; volající je při příchodu rozbalí:

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

Závorky u return jsou volitelné – holé return a, b je také n-tice.

2.8.6. N-tice vs seznam

Praktický návod, po čem sáhnout:

  • N-tice pro data pevného tvaru, často heterogenní: body (x, y), barvy (r, g, b), více návratových hodnot, argumenty funkce zabalené pro pozdější použití.

  • Seznam pro data proměnné délky, často homogenní: seznam měření, fronta položek ke zpracování, cokoli, k čemu očekáváte, že budete připojovat.

N-tice jsou také hashovatelné (pokud je každý prvek uvnitř hashovatelný), takže je lze použít jako klíče v dict.