You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

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 print funktion avulla. Ohjelma kysyy käyttäjältä lukuja funktioon syötettäväksi.

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...")

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.

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...")

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.

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...")

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.

  • No labels
You must log in to comment.