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()
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()
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ä:
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
.
Funktioiden ja parametrien 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)
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")
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)
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:
Parametrien 1 ja 2 summa on 3 Parametrien 130 ja 10 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 mahdollista 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.
Globaalien 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")
Hei Emilia Hei Emilia
Vaikka funktiota kutsutaan oikein, se tulostaa aina globaalissa muuttujassa olevan nimen Emilia.
Log in to view the quiz
Vastaa lopuksi osion loppukyselyyn:
Log in to view the quiz