2.8. Tuple-ök

A tuple értékek megváltoztathatatlan, rendezett sorozata. A létrehozása után a benne lévő elemek nem adhatók hozzá, nem távolíthatók el és nem módosíthatók.

2.8.1. Tuple-ök létrehozása

Tuple létrehozásához használj zárójeleket (vagy csak vesszőket):

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. Az egyelemű buktató

Egy érték körüli zárójelek csak zárójelek; ami valójában tuple-t alkot, az a vessző. Egy egyelemű tuple-höz záró vesszőre van szükség:

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

2.8.2. Hossz, indexelés és szeletelés

Ugyanaz, mint a listáknál és a karakterláncoknál – a len(), az indexelés, a szeletelés, az in és a + / * mind ugyanúgy működik:

>>> 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. Megváltoztathatatlanság

A tuple-öknek nincs append, pop, sort vagy bármilyen más helyben módosító metódusuk. Az indexelt értékadás TypeError kivételt vált ki:

>>> 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

Egy tuple „módosításához” építs egy újat a megváltozott értékekkel.

2.8.4. Kicsomagolás

Egy tuple fő szuperereje a kicsomagolás: minden elem hozzárendelése egy-egy különálló változóhoz egyetlen utasításban.

Egy háromelemű (1, 2, 3) tuple kicsomagolása három elnevezett változóba: x, y, z.

A kicsomagolás egy tuple minden elemét egy elnevezett változóhoz köti egyetlen értékadásban.

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

A jobb oldal bármilyen iterálható objektum lehet – egy lista, egy karakterlánc, egy függvény visszatérési értéke:

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

Egy vezető * egy kicsomagolás „maradékát” gyűjti össze egy listába:

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

2.8.5. Több visszatérési érték

Egy függvény visszaadhat egy tuple-t, hogy egyszerre több értéket szállítson; a hívó pedig kicsomagolja őket beérkezéskor:

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

A return utáni zárójelek opcionálisak – egy csupasz return a, b is tuple.

2.8.6. Tuple kontra lista

Gyakorlati útmutató ahhoz, melyikhez nyúlj:

  • Tuple rögzített alakú, gyakran heterogén adatokhoz: (x, y) pontok, (r, g, b) színek, több visszatérési érték, későbbi felhasználásra becsomagolt függvényargumentumok.

  • Lista változó hosszúságú, gyakran homogén adatokhoz: mérések listája, feldolgozandó elemek sora, bármi, amihez hozzáfűzésre számítasz.

A tuple-ök ráadásul hashelhetők is (mindaddig, amíg minden benne lévő elem hashelhető), így használhatók kulcsként egy dict típusban.