9 Ennik
Pythonis on olemas andmestruktuur, mille nimi on ennik (ingl tuple). Naljakas eestikeelne nimi on tuletatud sellest, et kolme elemendiga kogumit nimetatakse kolmikuks, nelja elemendiga nelikuks, viiega viisikuks jne. Kui sellises struktuuris on suvaline arv n elementi, siis võiks saadut nimetada nimega n-ik ehk eestipärasemalt ennik.
Enniku tähistamiseks kasutatakse ümarsulgusid (
ja )
. Näiteks kolmeelemendilise enniku ehk kolmiku saame tekitada nii:
kolmik = (1, 4, 6)
Üheelemendilise enniku (üksiku) tekitamine on pisut ebaintuitiivsem:
yksik = (1,)
Koma ainukese elemendi järel ütleb Pythonile, et tegemist on ennikuga, mitte aritmeetilise avaldisega, kus ümarsulud omavad teist tähendust.
Ennikute omadusi
Paljud enniku omadused on järjendi omadustega üsna sarnased:
- Ennikus on elementide järjestus oluline:
(1, 2)
ei ole võrdne ennikuga(2, 1)
. - Enniku elementide poole saab pöörduda indeksite abil: kui
enn
on ennik, siisenn[2]
on selle enniku kolmas element. - Enniku pikkuse saame teada funktsiooni
len
abil. - Mingi elemendi ennikusse kuulumist saame kontrollida võtmesõna
in
abil:
väärtuseks on kas3 in enn
True
võiFalse
. - Funktsioonide
jamin
max
abil saame leida ennikust vastavalt minimaalse või maksimaalse elemendi (eeldusel, et elemendid on mingil moel järjestatavad, nt arvud). - Ennikut saab viilutada:
enn[1:5]
annab alamenniku, milles onenn
elemendid indeksitega 1, 2, 3 ja 4.
Siiski pole järjend ja ennik funktsionaalsuse mõttes võrdsed. Enniku kõige olulisem erinevus peitub selles, et see ei ole muudetav (täpsemalt muteeritav, ingl mutable). Ennikusse ei ole pärast selle tekitamist võimalik elemente lisada, neid eemaldada ega muuta, seega pole ennikul näiteks järjendite tuntud käske append
,
, remove
, pop
, insert
ega reverse
extend
. Sellest tuleneb, et ennik on alati fikseeritud pikkusega.
Enesekontroll (1 ülesanne)
Ennikute kasutusalasid
Ennikuid kasutatakse sageli just siis, kui struktuuri pole vaja programmi käivitamise ajal muuta. Näiteks kui programmis on vaja tähistada objekte, millel on mitu omadust, kuid mida pole vaja programmi töötamise ajal muuta, siis on mõistlik nende esitamiseks kasutada ennikuid.
Samuti kasutatakse ennikuid siis, kui funktsioonist on vaja tagastada mitu väärtust. Näiteks see funktsioon leiab kahest järjendist elemendid, mille korrutis on suurim, ja tagastab need elemendid paarina:
def suurim_korrutis(lst1, lst2):
suurimad = (0, 0)
for el1 in lst1:
for el2 in lst2:
if el1 * el2 > suurimad[0] * suurimad[1]:
suurimad = (el1, el2)
return suurimad
Enesekontroll (1 ülesanne)
Mitme väärtuse tagastamisest
Kui ühe funktsiooni asemel, mis tagastab enniku tulemustest, on võimalik teha mitu funktsiooni, millest igaüks leiab ühe üksiku (väiksema) osa tulemustest, siis on tihti parem stiil valida mitme funktsiooniga variant. Mida väiksemad ülesanded saate eri funktsioonide vahel ära jaotada, seda lihtsam on tavaliselt koodist aru saada, sealt vigu otsida ja seda hallata.