Matematiikassa funktion voi ajatella olevan operaatio, joka muokkaa lukuja. Operaation jälkeen saadaan uusi luku.
$f(x) = x^2$
$f(4) = 16$
$g(a, b) = a \cdot b$
$g(4, 10) = 4 \cdot 10 = 40$
Myös pythonissa funktio voi olla operaatio, joka muokkaa lukuja. Funktio voi olla kuitenkin paljon monimutkaisempi, koska funktion sisällä voi suorittaa mitä tahansa python-koodia.
Pythonissa funktioita voi siis käyttää paljon muuhunkin kuin pelkkään lukujen käsittelyyn. Niillä voi esimerkiksi välttää saman koodin kirjoittamista moneen kertaan.
Funktioita voi luoda itse ja niitä on valmiina. Esimerkiksi print
ja len
ovat valmiiksi määriteltyjä funktioita.
Funktio voi ottaa parametreja ja palauttaa jonkun arvon. Parametreja voi olla mikä tahansa määrä. Funktio voi palauttaa arvon return
-rakenteella, mutta tämäkään ei ole pakollista.
def f(x):
return x ** 2
# Funktion f(x) parametriksi asetetaan luku 4 ja tallennetaan funktion palauttama arvo muuttujaan tulos
tulos = f(4)
print(tulos)
# Funktiolla g on kaksi parametria a ja b
def g(a, b):
return a * b
tulos = g(4, 10)
print(tulos)
Funktio suoritetaan vasta silloin kun sitä kutsutaan.
# Määritellään funktio, mutta ei vielä kutsuta sitä suoritettavaksi. Funktio2 ei palauta mitään
def funktio2():
print("printataan funktion sisältä")
# Kutsutaan print-funktiota kaksi kertaa
print(1)
print(2)
# Kutsutaan nyt itse määriteltyä funktiota suoritettavaksi
funktio2()
print(4)
funktio2()
Funktio suoritetaan vasta kun se kutsutaan.
Tee funktio, joka ottaa parametrikseen luvun ja palauttaa luvun itseisarvon
$\left|x\right|=\begin{cases} x&{,}\ jos\ x\ge 0\\ -x&{,}\ muuten \end{cases}$
def itseisarvo(x):
# Koodi tänne
if x >= 0:
return x
else:
return -x
# Testejä:
print(itseisarvo(3), "pitäisi olla 3")
print(itseisarvo(-3), "pitäisi olla 3")
print(itseisarvo(0), "pitäisi olla 0")
print("Funktion arvo on", itseisarvo(-10))
print(abs(-6))
Kirjoita funktio, joka
a) ottaa parametrikseen kaksi lukua ja laskee niiden keskiarvon
b) ottaa parametrikseen listan ja laskee sen keskiarvon
def itseisarvo(x):
if x < 0:
return -x
else:
return x
# Testejä:
print(itseisarvo(3), "pitäisi olla 3")
print(itseisarvo(-3), "pitäisi olla 3")
print(itseisarvo(0), "pitäisi olla 0")
Kirjoita funktio, joka ottaa parametrikseen listan ja palauttaa listan kaikkien lukujen tulon.
def tulo(lista):
tulo = 1
for luku in lista:
tulo = tulo * luku
return tulo
print(tulo([3,2,4]))
Tee funktio, joka ottaa parametriksi listan ja luvun. Palauta uusi lista, josta on poistettu kaikki annettua lukua pienemmät alkiot
def funktio(lista, luku):
# luodaan uusi tyhjä lista
uusi_lista = []
for alkio in lista:
if alkio >= luku:
# komenolla .append() lisätäään listaan uusi luku
uusi_lista.append(alkio)
return uusi_lista
testilista = [3, 5, 1, -10, 5, -100, 6, 1000, 40, -100]
muokattu_lista = funktio(testilista, 5)
print(muokattu_lista)
print(testilista)
Arvioi numeerinen derivaatta funktioista $f(x) = x^2$, $g(x) = 4x$ ja $s(x) = \sqrt{x}$ haluamassasi kohdissa. Numeerisen derivaatan voi arvioida kaavalla $\dfrac{f(x+h)-f(x)}{h}$, kun $h$ on pieni luku.
import math
def f(x):
return x ** 2
def g(x):
return 4 * x
def s(x):
return math.sqrt(x)
h = 0.000001
x = 1
derivaatta = (g(x + h) - g(x)) / h
print("funktion 4x numeerinen on:", derivaatta)
derivaatta2 = (f(1 + h) - f(1)) / h
print("funktion f(x) derivaatta kohdassa x=1 on", derivaatta2)
derivaatta3 = (s(2 + h) - s(2)) / h
print("funktion s(x) derivaatta kohdassa x=2 on", derivaatta3)