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.

A three-element tuple (1, 2, 3) unpacking into three named variables 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ä.