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