Definere og bruke funksjoner, parametre og returverdier for gjenbrukbar kode.
Funksjonar og modularitet
Når program blir større, blir det vanskeleg å halde oversikt. Funksjonar lèt oss dele opp koden i gjenbrukbare, namngjevne blokker som kvar løyser éi oppgåve. Du har allereie brukt innebygde funksjonar som print(), input() og range(). No skal du lære å lage dine eigne.
Fordelar med funksjonar:
- Gjenbruk: Skriv koden éin gong, bruk han mange gonger
- Oversikt: Programmet blir lettare å lese og forstå
- Feilsøking: Lettare å finne og fikse feil i isolerte blokker
- Samarbeid: Ulike personar kan jobbe med ulike funksjonar
Vi lagar ein funksjon med nøkkelordet def, etterfølgt av funksjonsnamnet og parentesar:
def hilsen():
print("Hei og velkommen!")
print("Hyggelig å se deg.")For å kalle (bruke) funksjonen skriv vi namnet med parentesar:
hilsen() # Kjører koden inne i funksjonen
hilsen() # Vi kan kalle den så mange ganger vi vilViktig: Funksjonen må definerast før han blir kalla. Python les koden ovanfrå og ned.
Lag ein funksjon som skriv ut ei skiljelinje for å gjere utskrifter ryddigare.
def skriv_linje():
print("-" * 40)
skriv_linje()
print("Rapport: Spenning i krets A")
skriv_linje()
print("Måling 1: 5.2V")
print("Måling 2: 5.1V")
skriv_linje()Output:
----------------------------------------
Rapport: Spenning i krets A
----------------------------------------
Måling 1: 5.2V
Måling 2: 5.1V
----------------------------------------Kva er rett måte å definere ein funksjon på i Python?
def adder(a, b): # a og b er parametre
return a + b # return sender verdien tilbake
resultat = adder(3, 5) # 3 og 5 er argumenter
print(resultat) # 8Ein funksjon kan ta null, éin eller fleire parametrar. Utan return returnerer funksjonen None.
def beregn_areal(lengde, bredde):
return lengde * bredde
areal = beregn_areal(5, 3)
print("Arealet er:", areal) # Arealet er: 15Lag ein funksjon som reknar ut motstand ved hjelp av Ohms lov: R = U / I.
def beregn_motstand(spenning, strom):
if strom == 0:
return None # Kan ikke dele på null
return spenning / strom
# Bruk funksjonen
r1 = beregn_motstand(12, 0.5)
r2 = beregn_motstand(5, 0.1)
print("Motstand 1:", r1, "ohm") # 24.0 ohm
print("Motstand 2:", r2, "ohm") # 50.0 ohmFunksjonen tek spenning og straum som parametrar og returnerer motstanden. Ved straum lik 0 blir None returnert for å unngå feil.
Lag ein funksjon beregn_effekt(spenning, strom) som returnerer effekten P = U × I. Test funksjonen med spenning 230V og straum 0.5A.
Kva returnerer denne funksjonen når vi kallar dobbel(4)?
def dobbel(x):
resultat = x * 2
print(resultat)Vi kan gje parametrar ein standardverdi (default). Då treng ikkje brukaren å oppgje alle argumenta:
def hilsen(navn, sprk="norsk"):
if sprk == "norsk":
print(f"Hei, {navn}!")
elif sprk == "engelsk":
print(f"Hello, {navn}!")
hilsen("Kari") # Hei, Kari! (bruker standard "norsk")
hilsen("Kari", "engelsk") # Hello, Kari!Reglar:
- Parametrar med standardverdi må kome etter parametrar utan
- Standardverdiar gjer funksjonar meir fleksible
- Du kan overstyre standardverdien ved å sende inn eit argument
Lag ein funksjon som reknar ut og formaterer motstand med valfri eining.
def vis_motstand(spenning, strom, enhet="ohm"):
motstand = spenning / strom
if enhet == "kohm":
motstand = motstand / 1000
return f"{motstand:.1f} {enhet}"
print(vis_motstand(12, 0.001)) # 12000.0 ohm
print(vis_motstand(12, 0.001, "kohm")) # 12.0 kohmNår vi ikkje oppgjev enhet, blir standardverdien "ohm" brukt. Ved behov kan vi oppgje "kohm" for kilo-ohm.
Lag ein funksjon celsius_til(temp, enhet="fahrenheit") som konverterer ein temperatur frå Celsius til anten Fahrenheit (F = C × 9/5 + 32) eller Kelvin (K = C + 273.15).
Test funksjonen med:
- celsius_til(100) → skal gje Fahrenheit
- celsius_til(0, "kelvin") → skal gje Kelvin
Lokale variablar er oppretta inne i ein funksjon og finst berre der:
def min_funksjon():
x = 10 # Lokal variabel
print(x) # 10
min_funksjon()
print(x) # Feil! x finnes ikke utenfor funksjonenGlobale variablar er oppretta utanfor funksjonar og kan lesast overalt:
melding = "Hei" # Global variabel
def skriv():
print(melding) # Kan lese globale variabler
skriv() # HeiViktig: Unngå å endre globale variablar inne i funksjonar. Bruk heller parametrar og returverdiar for å sende data inn og ut av funksjonar.
Tenk på funksjonar som sjølvstendige einingar:
- Inn: Data blir sendt inn via parametrar
- Ut: Resultat blir sendt ut via return
- Unngå: Å bruke globale variablar inne i funksjonar
# Dårlig praksis
total = 0
def legg_til(tall):
global total # Endrer global variabel
total = total + tall
# God praksis
def legg_til(total, tall):
return total + tall
total = legg_til(0, 5) # total = 5
total = legg_til(total, 3) # total = 8Kva blir skrive ut av denne koden?
x = 5
def endre():
x = 10
print(x)
endre()
print(x)Lag eit program med tre funksjonar for å rekne ut elektrisk effekt på ulike måtar:
1. effekt_ui(spenning, strom) — reknar P = U × I
2. effekt_ri(motstand, strom) — reknar P = R × I²
3. effekt_ur(spenning, motstand) — reknar P = U² / R
Test alle tre funksjonane med verdiar der U = 12V, I = 2A, R = 6Ω og verifiser at alle gjev same resultat (24W).
Oppsummering
I dette kapittelet har du lært:
- Funksjonar er namngjevne kodeblokker som gjer programmet modulært og gjenbrukbart
- Parametrar og argument lèt funksjonar ta imot data
- Returverdiar med return gjev resultat tilbake frå funksjonen
- Standardverdiar for parametrar gjer funksjonskall meir fleksible
- Lokalt og globalt scope avgjer kvar variablar er tilgjengelege
- Funksjonar gjer koden lettare å lese, teste og vedlikehalde
Nøkkelomgrep
| Omgrep | Forklaring |
|---|---|
| Funksjon | Namngjeven kodeblokk som utfører ei oppgåve |
| Parameter | Variabel i funksjonsdefinisjonen |
| Argument | Verdi som blir sendt til funksjonen ved kall |
| Returverdi | Verdien funksjonen gjev tilbake |
| Standardverdi | Førehandsdefinert verdi for ein parameter |
| Scope | Området der ein variabel er tilgjengeleg |
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.