CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, Luento-opetus, 5.9.2022-2.12.2022
This course space end date is set to 02.12.2022 Search Courses: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
main-funktio
Jos olet aiemmin osallistunut kurssille CS-A1111 Ohjelmoinnin peruskurssi Y1, olet todennäköisesti tutustunut lähestymistapaan, jossa Python-ohjelmat kirjoitetaan aina main-funktion sisään. Esimerkiksi näin:
def main(): nimi = input("Anna nimesi:\n") print("Moi", nimi) main()
Ohjelman suoritus voisi näyttää esimerkiksi tältä:
Anna nimesi: > Karl Moi Karl
Tällä kurssilla vastaava ohjelmat kannattaa kuitenkin kirjoittaa ilman main-funktiota. Eli:
nimi = input("Anna nimesi:\n") print("Moi", nimi)
Syynä on se, että osa CodeRunner-testeistä ei valitettavasti toimi, jos vastaus on kirjoitettu main-funktiota käyttäen.
Syventävää tietoa: Miksi main-funktiota käytetään?
Pythonissa ei siis ole pakko kirjoittaa ohjelmia main-funktiota käyttäen. Milloin main-funktiota sitten olisi syytä käyttää?
main-funktion käyttäminen on erittäin tärkeää esimerkiksi silloin, kuin kirjoitetaan moduuleja, jotka sisältävät muissa ohjelmissa käytettäviä funktioita, mutta moduuli voidaan ajaa myös omana ohjelmanaan. Tällöin on tärkeätä erottaa tilanteet, joissa jokin toinen ohjelma kutsuu moduulin funktiota tai moduuli ajetaan sellaisenaan. Otetaan esimerkki, jossa meillä on määritelty moduuli laskin (tiedosto laskin.py):
# Moduuli laskin # Funktio tuplaa: palauttaa parametrin "luku" kaksinkertaisena def tuplaa(luku): return luku * 2 # main-funktio, jota ei kutsuta, jos joku tuo laskin-moduulin omaan ohjelmaansa # import-käskyllä ja kutsuu tuplaa-funktiota def main(): numero = int(input("Anna kokonaisluku:\n")) tupla = tuplaa(numero) print("Antamasi luku kaksinkertaisena on:", tupla) # Kutsutaan main-funktiota vain, jos joku ajaa laskin-moduulin sellaisenaan # Esimerkiksi avaa tiedoston Spyderiin ja ajaa koodin if __name__ == "__main__": main()
Luodaan nyt ohjelma, joka hyödyntää laskin-moduulia:
import laskin print("5 x 2 on:", tuplaa(5))
Ohjelma tulostaisi pelkästään
5 x 2 on: 10
Toisaalta jos ajamme tiedoston laskin.py sellaisenaan (esimerkiksi Spyderissä), Python suorittaa laskin-moduulin main-funktion ja suoritus näyttää tältä:
Anna kokonaisluku:
> 9
Antamasi luku kaksinkertaisena on: 18
Ratkaisevan tärkeässä roolissa on siis __name__ -erikoismuuttuja, joka saa arvon "__main__", kun moduuli on ajettu omana ohjelmanaan (__ = kaksi alaviivaa peräkkäin).
Lisää yksityiskohtia aiheeseen liittyen esimerkiksi Pythonin dokumentaatiossa.