15. Moodulid
Pythonisse on sisse ehitatud hulk funktsioone. Paljud neist imporditakse Pythonit käivitades automaatselt (näiteks print(), input() jne), kuid paljude teiste puhul tuleb need enne kasutamist programmi importida. Põhjus on praktiline: nii ei koormata arvutit ülearuste võimaluste mällulaadimisega. Funktsioonide (ja klasside) kogumeid nimetatakse mooduliteks (inglise k. module).
Pythoniga on kaasas hulk standardmooduleid, siin on toodud neist väike valik:
- math - matemaatikamoodul (näit. astendamine, juurimine, trigonomeetrilised funktsioonid jne) (http://docs.python.org/3.2/library/math.html)
- random - juhuslikud arvud, juhuslik elementide järjekord (http://docs.python.org/3.2/library/random.html)
- datetime - kuupäeva ja kellaaja moodul (http://docs.python.org/3.2/library/datetime.html)
- time - ajaga seotud operatsioonid (näit. paus) (http://docs.python.org/3.2/library/time.html)
- os - operatsioonisüsteemiga seotud funktsioonid (näit. failide loetelu kaustas, failioperatsioonid jne) (http://docs.python.org/3.2/library/os.html)
- string - sõnemoodul (sõnede vormindamine jne) (http://docs.python.org/3.2/library/string.html)
- re - regulaaravaldiste moodul (mustri järgi sõnede otsimine jms) (http://docs.python.org/3.2/library/re.html)
Mooduli importimine toimub käsuga import. Enamasti tehakse programmis kasutatavate moodulite importimine ära programmi alguses kas iga mooduli importimine eraldi real või mitu moodulit ühel real, eraldajaks koma.
import math import math, random
Moodulis olevate meetodite kasutamine toimub järgmiselt:
print(math.sqrt(36)) # Väljastatakse ruutjuur 36-st # Muutuja "juhuarv" väärtuseks saab juhuslik täisarv vahemikus 1 kuni 10 (sh 1 ja 10) juhuarv = random.randint(1, 10)
Moodulis võib esineda ka konstante:
print(math.pi) # Väljastatakse PI väärtus
Mooduleid saab importida ka teisiti:
from math import *
Sel juhul kasutatakse programmi sees moodulis olevaid meetodeid ja konstante ilma mooduli nimeta:
print(sqrt(36)) print(pi)
Mõlemad variandid töötavad ning tundub, et teine variant on lihtsam: programmi sees ei pea uuesti kordama mooduli nime. Kuid ettevaatust: kui impordite mitu moodulit, milles on ühesuguse nimega meetodid (näiteks mitmes moodulis on meetod sqrt()), ei oska programm neid eristada!
Moodulite loomine
Mooduleid saame ka ise luua. Igasugust funktsioonikirjeldustega Pythoni programmi saame käsitleda moodulina. Piisab, kui salvestame moodulina kasutatava faili oma uue programmiga samasse kausta, impordime selle, kasutades moodulina kasutatava faili nime (ilma laiendita) ning seejärel kasutame moodulis olevaid funktsioone. Näiteks:
Fail "tervita.py":
def trykiTervitus(nimi): print("Tere, " + nimi)
Fail "test.py":
import tervita tervita.trykiTervitus("Siim") tervita.trykiTervitus("Triin")
Muidugi on moodul sellisel kujul mõttetu, kuid me võime moodulisse kirjutada väga keerulisi funktsioone ning neid teistega jagada ja hiljem erinevates programmides kasutada.
Kui programmi töökaustas on imporditava mooduliga samanimeline py-laiendiga fail, imporditakse hoopis see! Näiteks püüdes faili random.py olemasolul samas kaustas importida moodulit moodulit "random", imporditakse hoopis programm random.py. Kuna aga selles moodulis vajalikke funktsioone pole, antakse veateade (näiteks "'module' object has no attribute..." vms).
Samamoodi leiame internetist hulgaliselt teiste tehtud mooduleid, neist üht (Pygame) kasutame tulevikus graafiliste kasutajaliideste loomisel.
Üldiselt
- Ühe või mitme mooduli importimine
import <mooduli_nimi>
import <mooduli_nimi_1>, <mooduli_nimi_2>
- Mooduli meetodi (moodulis oleva funktsiooni) kasutamine
<mooduli_nimi>.<meetodi_nimi>()
<mooduli_nimi>.<meetodi_nimi>(<argument>)
<mooduli_nimi>.<meetodi_nimi>(<argument_1>, <argument_2>)
- Moodulis oleva konstandi väärtuse kasutamine
<mooduli_nimi>.<konstandi_nimi>
Lisamaterjalid
- https://docs.python.org/3/tutorial/modules.html
- http://docs.python.org/3.2/library/
- http://docs.python.org/3.2/tutorial/stdlib.html
Creative Commons litsentsiga Autorile viitamine + Mitteäriline eesmärk 3.0 Eesti (CC BY-NC 3.0 EE) - https://creativecommons.org/licenses/by-nc/3.0/ee/