Omat funktiot
Parsons Code Lab
Osana Helsingin yliopistossa tehtävää tietojenkäsittelytieteen opetuksen tutkimusta kehitetään parhaillaan uutta ohjelmoinnin harjoitteluympäristöä, Parsons Code Lab.
Sovelluksessa pääsee ratkaisemaan ohjelmointitehtäviä Parsonin pulmien muodossa; tehtävänä on järjestää ja täydentää koodilohkoja toimivaksi ohjelmaksi.
Alla olevasta linkistä pääset harjoitustehtäväkokonaisuuteen, jonka avulla voit kerrata monia kurssilla tähän mennessä käsiteltyjä keskeisiä ohjelmoinnin aiheita, kuten silmukoita, ehtolauseita ja merkkijonojen käsittelyä. Tehtävät ovat vapaaehtoista lisäharjoitusmateriaalia, eivätkä ne vaikuta kurssin arvosteluun millään tavalla. Kurssin opettaja voi kuitenkin tarkastella tehtävien ratkaisemiseen liittyviä tilastotietoja ohjelmiston opettajanäkymän kautta.
Huomaa, että ohjelmisto on vielä aktiivisessa kehitysvaiheessa, joten siinä saattaa esiintyä puutteita tai virheitä.
Annathan palautetta mahdollisista ongelmista sekä käyttökokemuksistasi! Alla olevaan anonyymiin kyselyyn vastaaminen vie vain noin minuutin, mutta palautteestasi on merkittävä apu ohjelmiston jatkokehityksessä.
Tehtävien käyttötietoja sekä palautekyselyn vastauksia voidaan hyödyntää tutkimuksessa täysin anonymisoituina.
Kiitos osallistumisestasi ja avustasi tutkimuksessa!
Funktion määrittely
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.
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 arvoVoimme 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