2.8. Monikot

Monikko (tuple) on muuttumaton, järjestetty arvojen jono. Kun se on kerran luotu, sen sisällä olevia alkioita ei voi lisätä, poistaa tai muuttaa.

2.8.1. Monikoiden luominen

Käytä kaarisulkeita (tai pelkkiä pilkkuja) monikon luomiseen:

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. Yhden alkion sudenkuoppa

Arvon ympärillä olevat kaarisulkeet ovat vain kaarisulkeita; se, mikä todella tekee monikon, on pilkku. Yhden alkion monikko tarvitsee perään pilkun:

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

2.8.2. Pituus, indeksointi ja viipalointi

Sama kuin listoilla ja merkkijonoilla – len(), indeksointi, viipalointi, in ja + / * toimivat kaikki samalla tavalla:

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

Monikoilla ei ole append-, pop-, sort- tai mitään muuta paikan päällä tapahtuvaa metodia. Indeksoitu sijoitus nostaa TypeError -poikkeuksen:

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

”Muokataksesi” monikkoa rakenna uusi muutetuilla arvoilla.

2.8.4. Purkaminen

Monikon pääsupervoima on purkaminen: kunkin alkion sijoittaminen erilliseen muuttujaan yhdellä lauseella.

Kolmen alkion monikko (1, 2, 3), joka purkautuu kolmeen nimettyyn muuttujaan x, y, z.

Purkaminen sitoo monikon kunkin alkion nimettyyn muuttujaan yhdellä sijoituksella.

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

Oikea puoli voi olla mikä tahansa iteroitava – lista, merkkijono, funktion paluuarvo:

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

Edessä oleva * kerää purkamisen ”loput” listaan:

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

2.8.5. Useat paluuarvot

Funktio voi palauttaa monikon toimittaakseen useita arvoja kerralla; kutsuja purkaa ne vastaanottaessaan:

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

return-lauseen kaarisulkeet ovat valinnaiset – pelkkä return a, b on myös monikko.

2.8.6. Monikko vs. lista

Käytännön opas siihen, kumpaan turvautua:

  • Monikko kiinteämuotoiselle, usein heterogeeniselle datalle: (x, y) -pisteet, (r, g, b) -värit, useat paluuarvot, myöhempää käyttöä varten paketoidut funktion argumentit.

  • Lista vaihtelevanpituiselle, usein homogeeniselle datalle: lista mittauksia, käsiteltävien alkioiden jono, mikä tahansa, johon odotat lisääväsi.

Monikot ovat myös hajautettavia (kunhan jokainen sisällä oleva alkio on hajautettava), joten niitä voi käyttää avaimina dict -tyypissä.