...
Funktioille
...
voi
...
välittää
...
myös
...
parametreja
...
eli
...
muuttujan
...
arvoja,
...
joita
...
funktio
...
käyttää
...
sitä
...
kutsuttaessa.
...
Omille
...
funktioille
...
parametrien
...
määrittäminen
...
onnistuu
...
luettelemalla
...
halutut
...
parametrit
...
funktion
...
määrittelyssä
...
funktion
...
nimen
...
jälkeisiin
...
sulkeisiin
...
pilkulla
...
erotettuna.
...
Parametrin
...
nimeksi
...
käy
...
mikä
...
tahansa
...
Pythonissa
...
tunnisteeksi
...
kelpaava
...
teksti.
...
Tässä esimerkissä luodaan funktiota,
...
Difference,
...
joka
...
laskee
...
kahden
...
kokonaisluvun
...
erotuksen
...
itseisarvon.
...
Funktio
...
tulostaa
...
tuloksen
...
...
funktion
...
avulla.
...
Ohjelma
...
kysyy
...
käyttäjältä
...
lukuja
...
funktioon
...
syötettäväksi.
Code Block |
---|
} def Difference(a, b): print("Lukujen %s ja %s ero on\n%s" % (a, b, abs(a - b))) x = "" while not x.isnumeric(): x = input("Anna kokonaisluku: ") x = int(x) y = "" while not y.isnumeric(): y = input("Anna toinen kokonaisluku: ") y = int(y) Difference(x, y) input("Paina Enter näppäintä lopettaaksesi...") {code} |
Yleensä
...
funktiot
...
tosin
...
palauttavat
...
jonkin
...
arvon
...
sen
...
sijaan,
...
että
...
tulostaisivat
...
jonkun
...
tuloksen
...
automaattisesti
...
ruudulle.
...
Arvon
...
palauttamiseksi
...
Pythonissa
...
on
...
avainsana
...
return,
...
joka
...
pysäyttää
...
funktion
...
suorituksen
...
ja
...
palauttaa
...
return
...
avainsanaa
...
seuraavan
...
arvon.
...
Tässä
...
esimerkissä
...
funktio
...
difference
...
palauttaa
...
laskemansa
...
arvon,
...
joka
...
laitetaan
...
tulostettavaan
...
merkkijonoon
...
funktion
...
ulkopuolella.
Code Block |
---|
} def Difference(a, b): return abs(a - b) x = "" while not x.isnumeric(): x = input("Anna kokonaisluku: ") x = int(x) y = "" while not y.isnumeric(): y = input("Anna toinen kokonaisluku: ") y = int(y) print("Lukujen %s ja %s ero on\n%s" % (x, y, Difference(x, y))) input("Paina Enter näppäintä lopettaaksesi...") {code} |
Tässä
...
kohtaa
...
joku
...
varmaan
...
huomaa,
...
että
...
ohjelmassa
...
toistuu
...
kaksi
...
kertaa
...
merkkijonon
...
kysyminen
...
toistorakenteessa
...
ja
...
sen
...
muunto
...
kokonaisluvuksi.
...
Tämä
...
on
...
hyvä
...
esimerkki
...
tilanteesta,
...
jossa
...
on
...
hyvä
...
miettiä
...
toiminnon
...
siirtämistä
...
omaan
...
funktioon,
...
jolloin
...
saman
...
toiminnon
...
toistamiseen
...
riittää
...
yksi
...
funktio
...
kutsu.
Tässä vaiheessa voisi esittää myös funktion parametrien oletusarvot; eli arvot, jotka parametreilla on, jos niitä ei funktiota kutsuttaessa anneta. Tässä esimerkissä on tehty funktio PromptInteger, joka kysyy käyttäjältä kokonaislukua kunnes se saa validin merkkijonon. Parametriksi voi antaa tekstin, joka lukua kysyttäessä kysytään, mutta sille on määritetty oletusarvo. Tässä, ensimmäisessä funktio kutsussa käytetään oletusarvoa ja toisessa parametrille annetaan arvo.
Code Block |
---|
Tässä vaiheessa voisi esittää myös funktion parametrien oletusarvot; eli arvot, jotka parametreilla on, jos niitä ei funktiota kutsuttaessa anneta. Tässä esimerkissä on tehty funktio PromptInteger, joka kysyy käyttäjältä kokonaislukua kunnes se saa validin merkkijonon. Parametriksi voi antaa tekstin, joka lukua kysyttäessä kysytään, mutta sille on määritetty oletusarvo. Tässä, ensimmäisessä funktio kutsussa käytetään oletusarvoa ja toisessa parametrille annetaan arvo. {code} def PromptInteger(prompt="Anna kokonaisluku: "): s = "" while not s.isnumeric(): s = input(prompt) return int(s) def Difference(a, b): return abs(a - b) x = PromptInteger() y = PromptInteger("Anna toinen kokonaisluku: ") print("Lukujen %s ja %s ero on\n%s" % (x, y, Difference(x, y))) input("Paina Enter näppäintä lopettaaksesi...") {code} |
Normaalisti
...
funktiota
...
kutsuttaessa
...
parametrit
...
annetaan
...
järjestyksessä
...
ensimmäisestä
...
viimeiseen
...
ja
...
oletusarvon
...
omaavat
...
parametrit
...
voi
...
jättää
...
arvotta.
...
Jos
...
parametreille
...
on
...
määritelty
...
oletusarvoja,
...
niille
...
voi
...
antaa
...
arvot
...
missä
...
järjestyksessä
...
tahansa.
...
Tämä
...
onnistuu
...
funktiota
...
kutsuttaessa
...
kirjoittamalla
...
parametrin
...
nimen
...
ja
...
antamalla
...
sille
...
arvo
...
sijoitusoperaattorilla.
...
Antaessa parametreille arvoja tällä tavalla, täytyy kaikki parametrit antaa tällä tavalla. Ainoastaan ensimmäiset parametrit voi antaa ilman sijoitusoperaattoria järjestyksessä. Tämän takia määrittäessä parametreja sekä normaalisti että oletusarvoilla, ne parametrit, joilla ei ole oletusarvoja, kannattaa pitää parametrien määrittelyssä ensimmäisenä.
Tämä on hyödyllinen ominaisuus, jos halutaan määrittää funktio, jonka käyttäytymistä halutaan hienosäätää useiden parametrien kautta, mutta joilla on usein toimii tietty oletusarvo.