Osa 3

Omat funktiot

Aikaisemmissa osissa on käytetty esimerkiksi funktioita len, print ja input eri tarkoituksiin. Nämä ovat Pythonin sisäänrakennettuja funktioita, mutta voimme myös määritellä omia funktioita.

Funktion määrittely

Oma funktio määritellään avainsanalla def (lyhenne sanasta define). Funktiolle annetaan jokin nimi, jonka jälkeen on alku- ja loppusulku. Tämän jälkeen annetaan lohkossa funktioon kuuluva koodi.

Esimerkiksi seuraava koodi määrittelee funktion viesti:

def viesti():
    print("Tämä on oma funktio!")

Jos yllä oleva ohjelma suoritetaan, se ei näytä tekevän mitään. Tämä johtuu siitä, että funktion sisältämä koodi suoritetaan vasta silloin, kun funktiota kutsutaan.

Funktion kutsuminen tapahtuu funktion nimellä. Esimerkiksi seuraava koodi kutsuu funktiota:

def viesti():
    print("Tämä on oma funktio!")

viesti()
Esimerkkitulostus

Tämä on oma funktio!

Samaa funktiota voidaan määrittelyn jälkeen kutsua useita kertoja.

def viesti():
    print("Tämä on oma funktio!")

viesti()
viesti()
viesti()
Esimerkkitulostus

Tämä on oma funktio! Tämä on oma funktio! Tämä on oma funktio!

Funktion parametri

Usein funktiolla on yksi tai useampi parametri, jolla sen toimintaan voi vaikuttaa. Esimerkiksi Pythonin valmiissa funktioissa print ja input parametrin avulla annetaan näytettävä teksti:

print("Hei!")                     # parametrina merkkijono "Hei!"
nimi = input("Kerro nimesi: ")    # parametrina merkkijono "Kerro nimesi: "
print(nimi)                       # parametrina muuttujan nimi arvo

Voimme määritellä parametreja myös omille funktioillemme. Parametrit määritellään funktion nimen jälkeen olevien sulkujen sisällä:

def tervehdi(kohde):
    print("Hei", kohde)

Jos funktiota kutsutaan kaksi kertaa

tervehdi("Emilia")
tervehdi("maailma!")

tulostaa se kaksi erilaista tervehdystä:

Esimerkkitulostus

Hei Emilia Hei maailma!

Katsotaan funktion määrittelyä vielä tarkemmin:

def tervehdi(kohde):
    print("Hei", kohde)

Määrittelimme ensimmäisellä rivillä, että funktion parametri on nimeltään kohde. Toisella rivillä print-komento käyttää parametrissa kohde olevaa arvoa.

Kun funktiota kutsutaan, saa parametri funktiokutsussa annettavan arvon. Esimerkiksi kun kutsutaan

nimi = "Antti"
tervehdi(nimi)

niin parametrin kohde arvo funktiossa on merkkijono Antti.

Parametrien ja myös funktioiden nimeämistä koskevat samat periaatteet kuin mitä olemme jo aiemmin käsitelleet, eli nimien kannattaa olla kuvaavia ja käytössä ovat ensisijaisesti pienet kirjaimet sekä alaviiva.

Lisää esimerkkejä

Katsotaan vielä pari muuta esimerkkiä parametrien käyttämisestä. Seuraavassa funktiossa parametri on luku:

def nelio(x):
    print(f"Luvun {x} neliö on {x * x}")

nelio(2)
nelio(5)
Esimerkkitulostus

Luvun 2 neliö on 4 Luvun 5 neliö on 25

Seuraavassa esimerkissä funktion sisällä on ehtorakenne:

def tervehdi(nimi):
    if nimi == "Emilia":
        print("Heippa,", nimi)
    else:
        print("Moikka,", nimi)

tervehdi("Emilia")
tervehdi("Matti")
Esimerkkitulostus

Heippa, Emilia Moikka, Matti

Seuraavassa funktiossa puolestaan on kaksi parametria:

def summa(x, y):
    tulos = x + y
    print(f"Parametrien {x} ja {y} summa on {tulos} ")

summa(1, 2)
summa(5, 24)
Esimerkkitulostus

Parametrien 1 ja 2 summa on 3 Parametrien 5 ja 24 summa on 29

Funktio myös määrittelee "apumuuttujan" tulos, mihin se sijoittaa parametriensa summan.

Huomaa, että parametrien nimillä ei ole mitään tekemistä funktion ulkopuolella olevien muuttujien kanssa. Esimerkiksi jos kutsumme äskeistä funktiota

x = 100
y = 30
summa(1, 2)
summa(x + y, 10)

niin tuloksena on:

Esimerkkitulostus

Parametrien summa on 3 Parametrien summa on 140

Ensimmäisessä kutsussa parametrien arvot funktion sisällä ovat x = 1 ja y = 2, ja toisessa kutsussa arvot ovat x = 130 ja y = 10.

Palaamme funktioihin ja parametrien määrittelyyn tarkemmin seuraavan osan alussa.

Varoitus: globaalin muuttujan käyttö funktion sisällä

Kuten olemme nähneet, funktioiden sisällä on mahdollsita määritellä muuttujia. Kannattaa myös huomata se, että funktio näkee sen ulkopuolella, eli pääohjelmassa määritellyt muuttujat. Tälläisia muuttujia sanotaan globaaleiksi muuttujiksi.

Globalien muuttujien käyttämistä funktioista käsin ei useimmiten pidetä hyvänä asiana muun muassa siksi, että ne saattavat johtaa ikäviin bugeihin.

Seuraavassa on esimerkki funktiosta, joka käyttää "vahingossa" globaalia muuttujaa:

# globaali muuttuja
nimi = "Emilia"

def tervehdi(etunimi):
    # tulostetaan vahingossa parametrin sijaan globaalin muuttujan arvo
    print("Hei", nimi)

tervehdi("Antti")
tervehdi("Emilia")
Esimerkkitulostus

Hei Emilia Hei Emilia

Vaikka funktiota kutsutaan oikein, se tulosaa aina globaalissa muuttujassa olevan nimen Emilia.

:
Loading...
:
Loading...

Log in to view the quiz

Vastaa lopuksi osion loppukyselyyn:

:
Loading...
:
Loading...

Log in to view the quiz