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

Compare with Current View Page History

Version 1 Next »

Pythonissa funktiot ovat aivan kuin muut muuttuja tyypit, eli niitä voi sijoittaa muuttujiin. Tästä johtuen funktioita voi välittää esim. parametreina muille funktioille tai säilöä kokoelmaan, josta niitä voidaan kutsua halutulla tavalla.Avainsanan def avulla tehdyn funktion tunniste on def avainsanan jälkeen oleva nimi; jättämällä parametrilistauksen pois, tunnisteen voi sijoittaa toiseen muuttujaan.
 
Tässä esimerkissä tehdään kolme funktiota, jotka sijoitetaan listan alkioiksi ja kutsutaan niitä erilaisilla parametreilla.

def Square(x):
    return x * x
 
def Cube(x):
    return x * x * x
 
def SquareOfSubtraction(x, y):
    return (x - y) ** 2
 
L = [Square, Cube, SquareOfSubtraction]
 
print(L[0](7))
print(L[1](3))
print(L[0](5))
print(L[2](12, 7))
 
input("Paina Enter-näppäintä lopettaaksesi...")

Avainsana lambda on toinen tapa tehdä funktioita. Sen avulla tehdää ns. lambda lauseke, joka on käytännössä funktio ilman tunnistetta, mutta jonka voi sijoittaa muuttujaan niinkuin muutkin funktiot. Parametrit listataan pilkulla erotettuna avainsanan lambda jälkeen, joiden jälkeen kaksoispiste, jota puolestaan seuraa ilmaus, jonka arvon funktio palauttaa - avainsanaa return ei käytetä tässä.
 
Tässä edellinen esimerkki käyttäen lambda lausekkeita.

Square = lambda x: x * x
Cube = lambda x: x * x * x
SquareOfSubtraction = lambda x, y: (x - y) ** 2
 
L = [Square, Cube, SquareOfSubtraction]
 
print(L[0](7))
print(L[1](3))
print(L[0](5))
print(L[2](12, 7))
 
input("Paina Enter-näppäintä lopettaaksesi...")

Koska lambda on lauseke, se ei voi sisältää usean rivin koodiosiota niinkuin avainsanaa def käytettäessä; samasta syystä se voi koodissa esiintyä paikoissa, missä def rakenne ei kuten listan alkiona. Tässä edellinen esimerkki sijoittaen lambda lausekkeet suoraan listan alkioiksi sijoittamatta niitä ensin muuttujiin.

L = [lambda x: x * x,
     lambda x: x * x * x,
     lambda x, y: (x - y) ** 2]
 
print(L[0](7))
print(L[1](3))
print(L[0](5))
print(L[2](12, 7))
 
input("Paina Enter-näppäintä lopettaaksesi...")

Vaikka lauseke asettaakin rajoitteita pitempien funktioiden määrittelyssä voi avainsana lambdan avulla tehdä samat funktiot kuin avainsanalla def. Normaalisti kumminkin on parempi käyttää avainsanaa def monimutkaisten ja pitkien lausekkeiden sijaan. Silti lambda lauseke toimii hyvin, jos on tarvetta määritellä pieniä koodin pätkiä ohjelman eri osille suoritettavaksi kuten ns. takaisinkutsu funktioissa.

  • No labels
You must log in to comment.