Yksinkertaisia esimerkkejä

Tarkastellaan seuraavaa esimerkkiä: halutaan kirjoittaa ohjelma, joka tulostaa kuvaruudulle alla olevan mallin mukaisen kuvion.

  *
 ***
*****
  *
 ***
*****
  *
 ***
*****

Havaitaan, että kuvio muodostuu kolmesta kolmiosta. Ohjelma voidaan kirjoittaa nyt niin, että kirjoitetaan funktio tulosta_kolmio, joka tulostaa yhden kolmion ja suoritetaan tämä funktio kolme kertaa. Funktio määritellään samaan tapaan kuin pääohjelmakin. Määrittely aloitetaan sanalla def ja funktion nimellä, jonka jälkeen tulevat sulut ja kaksoispiste. Seuraavalta riviltä alkavat sitten funktioon kuuluvat käskyt. Jälleen sisennysten avulla osoitetaan, mitkä käskyt kuuluvat tämän funktion sisälle.

Pääohjelman tehtäväksi jää kutsua funktiota tulosta_kolmio kolme kertaa. Funktiota kutsutaan kirjoittamalla sen nimi ja nimen perään sulut. Funktion kutsu saa aikaan sen, että pääohjelman suoritus tavallaan keskeytetään ja siirrytään suorittamaan funktioon kuuluvia käskyjä. Kun funktion suoritus päättyy, siirrytään takaisin pääohjelmaan ja jatketaan siitä kohdasta, jossa pääohjelman suoritus keskeytyi.

Ohjelma on kokonaisuudessaan seuraava:

def tulosta_kolmio():
    print("  *  ")
    print(" *** ")
    print("*****")


def main():
    tulosta_kolmio()
    tulosta_kolmio()
    tulosta_kolmio()


main()

Ohjelma tulostaa edellä esitetyn kuvion. Koska pääohjelmassa suoritetaan sama käsky (funktion tulosta_kolmio kutsu) kolme kertaa peräkkäin, voidaan kutsu kirjoittaa myös toistokäskyn sisään. Jos vielä kutsukertojen määrä määritellään vakioksi, on sitä helppo muuttaa myöhemmin. Muutettu pääohjelma on seuraavan näköinen:

def main():
    KERRAT = 3
    for i in range(KERRAT):
        tulosta_kolmio()

Ohjelman muut osat jäävät ennalleen. Toistokäskyn sisällä oleva käsky (funktion tulosta_kolmio kutsu) ei riipu mitenkään toistokäskyssä käytetystä muuttujasta i, vaan toistettava käsky suoritetaan joka kerta täysin samalla tavalla. Muuttujaa i voidaan kuitenkin käyttää tällä tavalla pitämään huolta siitä, että toistokäskyä suoritetaan juuri haluttu määrä kierroksia.

Tarkastellaan seuraavaa esimerkkiohjelmaa, jonka tarkoituksena on lähinnä selventää sitä, miten ohjelman suoritus ja funktiokutsut etenevät.

def tervehdi():
    nimi = input("Kuka olet? ")
    print("Hei,", nimi)


def tulosta_kolmio():
    print("  *  ")
    print(" *** ")
    print("*****")


def main():
    print("Alku")
    tervehdi()
    print("Puolivali")
    tulosta_kolmio()
    print("Loppu")


main()

Ohjelmassa ensimmäiseksi suoritettava käsky on sen lopussa oleva pääohjelman kutsu main(), joka saa aikaan sen, että Python-tulkki lähtee suorittamaan pääohjelman määrittelyyn kirjoitettua koodia. Siinä tulostetaan ensin kuvaruudulle yksi rivi. Sen jälkeen ohjelmassa kutsutaan tervehdi-funktiota eli lähdetään suorittamaan ko. funktion määrittelyyn kirjoitettuja käskyjä. Kun funktion suoritus päättyy, palataan takaisin pääohjelmaan, jossa on seuraavana vuorossa jälleen yhden rivin tulostus. Sen jälkeen siirrytään suorittamaan funktioon tulosta_kolmio määriteltyjä käskyjä. Kun funktion suoritus on lopussa, palataan pääohjelmaan ja suoritetaan siinä viimeisenä oleva tulostuskäsky. Ohjelman osien suoritusjärjestystä on kuvattu vielä alla olevassa kuvassa.

../_images/funktiokutsut.png

Näin ollen ohjelman tulostus voi olla esimerkiksi seuraava:

Alku
Kuka olet? Pekka
Hei, Pekka
Puolivali
  *
 ***
*****
Loppu