Aliohjelmat ja funktiot Pythonissa

Funktio kokoaa yhden tehtävän nimetyksi kokonaisuudeksi. Määrittelyssä olevat nimet ovat parametreja; kutsussa annetut arvot ovat argumentteja.

Määrittely ja kutsu

def määrittelee funktion, mutta ei suorita sen runkoa. Kutsu käynnistää funktion. Ilman return-lausetta tai pelkällä return-lauseella paluuarvo on None.

def tervehdi():
    print("Hei!")
tervehdi()

Tulostus (ilman syötteiden kysymystekstejä):

Hei!

Parametri välittää tiedon

Parametriin viitataan funktion sisällä. Funktio ei tarvitse input-kutsua, jos kutsuja välittää tiedon. Tämä helpottaa testaamista eri arvoilla.

def tervehdi(nimi):
    print(f"Hei, {nimi}!")
tervehdi("Aino")
tervehdi("Mikko")

Tulostus (ilman syötteiden kysymystekstejä):

Hei, Aino!
Hei, Mikko!

return ja print ovat eri asioita

return antaa arvon kutsujalle ja päättää kyseisen funktiokutsun. print näyttää tekstin mutta ei palauta tulostettua arvoa. Pidä laskenta ja tulostus erillään, jos haluat käyttää tulosta myöhemmin.

def summa(a, b):
    return a + b
tulos = summa(2, 5)
print(tulos)
print(summa(-3, 1))

Tulostus (ilman syötteiden kysymystekstejä):

7
-2
def nayta():
    print("Hei")
tulos = nayta()
print(tulos)

Tulostus (ilman syötteiden kysymystekstejä):

Hei
None

Paikalliset nimet ja pääohjelma

Funktion paikalliset nimet eivät yleensä näy ulkopuolelle. __name__ on moduulin nimen sisältävä muuttuja, ei funktio. Suoraan ajettavassa ohjelmassa sen arvo on "__main__". Ehto if __name__ == "__main__" rajaa kutsut suoraan suoritukseen; kurssin pienissä ohjelmissa sitä ei ole pakko käyttää.

def summa(a, b):
    return a + b
if __name__ == "__main__":
    print(summa(4, 6))

Tulostus (ilman syötteiden kysymystekstejä):

10

Kokeile itse

Mitä tapahtuu, jos vaihdat summa-funktion return a + b -rivin muotoon print(a + b)?

Vastaus ja perustelu

Funktio tulostaa summan mutta palauttaa None. Tulosmuuttujaan ei enää tule laskettua lukua.

Suorita koodiesimerkit yksi kerrallaan. Jokainen esimerkki sisältää tarvitsemansa määrittelyt. Vertaa omaa ennustettasi tulosteeseen ennen seuraavaan aiheeseen siirtymistä.

Katso aihevideo YouTubessa