Lær å definere egne funksjoner, bruke parametere og returverdier, og importere moduler.
Funksjonar og gjenbruk
Tenk deg at du har skrive kode som reknar ut gjennomsnittet av tre tal, og du treng å gjere den same berekninga fleire stader i programmet. Du kan kopiere og lime inn koden, men det fører til duplisering, feil og vanskeleg vedlikehald. Funksjonar løyser dette problemet.
Ein funksjon er ein namngjeven blokk med kode som du kan kalle (bruke) når som helst i programmet. Du har allereie brukt funksjonar som print(), input(), int() og range(). No skal du lære å lage dine eigne funksjonar.
Funksjonar er eitt av dei viktigaste konsepta i programmering. Dei lèt deg organisere koden i logiske einingar, unngå gjentaking, og gjere program lettare å lese, teste og vedlikehalde. I dette kapittelet lærer du å definere funksjonar, bruke parametrar og returverdiar, og importere ferdige modular.
Ein funksjon er ein namngjeven, gjenbrukbar blokk med kode som utfører ei bestemt oppgåve. Funksjonar gjer det mogleg å bryte ned eit stort program i mindre, handterbare delar. Du kan tenkje på ein funksjon som ei maskin: du puttar noko inn (parametrar), maskina gjer arbeidet sitt, og du får noko ut (returverdi). Funksjonar blir definerte éin gong og kan kallast (brukast) mange gonger. Dei viktigaste fordelane med funksjonar er gjenbruk av kode, betre organisering og enklare feilsøking.
Din første funksjon
Du definerer ein funksjon med def-nøkkelordet, etterfølgt av funksjonsnamnet, parentesar og kolon:
# Definere en funksjon
def si_hei():
print("Hei! Velkommen til programmet!")
print("Ha det gøy!")
# Kalle (bruke) funksjonen
si_hei()
si_hei() # Du kan kalle den mange gangerKøyring gir:
Hei! Velkommen til programmet!
Ha det gøy!
Hei! Velkommen til programmet!
Ha det gøy!Viktig: Å definere ein funksjon utfører han ikkje. Koden inne i funksjonen blir køyrd først når du kallar funksjonen ved å skrive namnet med parentesar: si_hei().
Funksjonar med parametrar
Parametrar lèt deg sende verdiar inn i funksjonen:
def hils_paa(navn):
print(f"Hei, {navn}! Hyggelig å møte deg!")
hils_paa("Sara") # Hei, Sara! Hyggelig å møte deg!
hils_paa("Ole") # Hei, Ole! Hyggelig å møte deg!
hils_paa("Kari") # Hei, Kari! Hyggelig å møte deg!navn er ein parameter i funksjonsdefinisjonen. "Sara", "Ole" og "Kari" er argument som blir sende til funksjonen.
Fleire parametrar
def presenter(fornavn, etternavn, alder):
print(f"Jeg heter {fornavn} {etternavn} og er {alder} år.")
presenter("Sara", "Hansen", 17)
presenter("Ole", "Berg", 16)Køyring gir:
Jeg heter Sara Hansen og er 17 år.
Jeg heter Ole Berg og er 16 år.Rekkjefølgja på argumenta må matche rekkjefølgja på parametrane.
Returverdiar med return
Funksjonar kan sende ein verdi tilbake til koden som kalla dei med return:
def beregn_areal(bredde, hoyde):
areal = bredde * hoyde
return areal
# Bruk returverdien
resultat = beregn_areal(5, 3)
print(f"Arealet er {resultat}") # Arealet er 15
# Eller bruk returverdien direkte
print(f"Arealet er {beregn_areal(10, 4)}") # Arealet er 40Når Python møter return, stoppar funksjonen med ein gong og sender verdien tilbake. Kode etter return i same funksjon blir aldri køyrd.
Funksjonar med og utan returverdi
Funksjonar som brukar return gir ein verdi tilbake som du kan lagre i ein variabel eller bruke i berekningar. Funksjonar utan return (eller med berre return utan verdi) returnerer automatisk None:
# Funksjon MED returverdi (beregner noe)
def adder(a, b):
return a + b
summen = adder(5, 3)
print(summen) # 8
# Funksjon UTEN returverdi (gjør en handling)
def skriv_linje():
print("-" * 40)
skriv_linje() # Skriver ut en linje med bindestrekerTommelfingerregel: Dersom funksjonen reknar ut noko, bruk return. Dersom funksjonen berre gjer ei handling (som å skrive ut tekst), treng du ikkje return.
Returnere fleire verdiar
Python lèt deg returnere fleire verdiar som ein tuppel:
def beregn_statistikk(tall1, tall2, tall3):
summen = tall1 + tall2 + tall3
gjennomsnitt = summen / 3
storste = max(tall1, tall2, tall3)
return summen, gjennomsnitt, storste
s, g, maks = beregn_statistikk(10, 20, 30)
print(f"Sum: {s}, Gjennomsnitt: {g}, Størst: {maks}")
# Sum: 60, Gjennomsnitt: 20.0, Størst: 30Lag ein kalkulator som brukar funksjonar for dei fire rekneartane.
# Kalkulator med funksjoner
def adder(a, b):
return a + b
def subtraher(a, b):
return a - b
def multipliser(a, b):
return a * b
def divider(a, b):
if b == 0:
return "Kan ikke dele på null!"
return a / b
# Hovedprogram
print("=== Kalkulator ===")
tall1 = float(input("Første tall: "))
tall2 = float(input("Andre tall: "))
print(f"\n{tall1} + {tall2} = {adder(tall1, tall2)}")
print(f"{tall1} - {tall2} = {subtraher(tall1, tall2)}")
print(f"{tall1} * {tall2} = {multipliser(tall1, tall2)}")
print(f"{tall1} / {tall2} = {divider(tall1, tall2)}")Døme på køyring:
=== Kalkulator ===
Første tall: 10
Andre tall: 3
10.0 + 3.0 = 13.0
10.0 - 3.0 = 7.0
10.0 * 3.0 = 30.0
10.0 / 3.0 = 3.3333333333333335Kvar rekneart er sin eigen funksjon. divider()-funksjonen sjekkar for divisjon med null. Hovudprogrammet kallar funksjonane og viser resultata.
Scope avgjer kvar i koden ein variabel er tilgjengeleg. Lokale variablar blir oppretta inne i ein funksjon og eksisterer berre medan funksjonen køyrer. Dei er ikkje tilgjengelege utanfor funksjonen. Globale variablar blir oppretta utanfor alle funksjonar og er tilgjengelege overalt i programmet. Funksjonar kan lese globale variablar, men for å endre dei må du bruke nøkkelordet global. Som hovudregel bør du unngå globale variablar og heller bruke parametrar og returverdiar.
Lokale og globale variablar
# Global variabel
melding = "Hei fra utenfor!"
def min_funksjon():
# Lokal variabel
lokal_melding = "Hei fra inni funksjonen!"
print(lokal_melding) # Fungerer
print(melding) # Fungerer (kan lese global variabel)
min_funksjon()
print(melding) # Fungerer (global variabel)
# print(lokal_melding) # FEIL! Variabelen finnes ikke herViktige reglar:
1. Lokale variablar er berre tilgjengelege inne i funksjonen der dei blir oppretta
2. Globale variablar kan lesast inne i funksjonar
3. Parametrar oppfører seg som lokale variablar
def doble(tall):
resultat = tall * 2 # resultat er lokal
return resultat
svar = doble(5)
print(svar) # 10
# print(tall) # FEIL! tall er en parameter (lokal)
# print(resultat) # FEIL! resultat er lokalStandardverdiar for parametrar
Du kan gi parametrar standardverdiar som blir brukte dersom argumentet ikkje blir sendt:
def hils(navn, hilsen="Hei"):
print(f"{hilsen}, {navn}!")
hils("Sara") # Hei, Sara!
hils("Ole", "God morgen") # God morgen, Ole!Parametrar med standardverdiar må komme etter parametrar utan standardverdiar.
Modular - Gjenbruk koden til andre
Python kjem med hundrevis av ferdige modular som inneheld nyttige funksjonar. Du importerer ein modul med import:
# Importere hele modulen
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0 (kvadratrot)
print(math.ceil(3.2)) # 4 (runder opp)
print(math.floor(3.8)) # 3 (runder ned)Ulike måtar å importere på
# Importere hele modulen
import random
print(random.randint(1, 10))
# Importere spesifikke funksjoner
from random import randint, choice
print(randint(1, 10)) # Trenger ikke skrive random.
print(choice(["eple", "banan", "appelsin"]))
# Importere med alias
import random as rnd
print(rnd.randint(1, 10))Nyttige standardmodular
| Modul | Skildring | Døme |
|---|---|---|
math | Matematiske funksjonar | math.sqrt(25), math.pi |
random | Tilfeldige tal | random.randint(1, 100) |
datetime | Dato og tid | datetime.datetime.now() |
os | Operativsystem-funksjonar | os.getcwd() |
string | Tekstmanipulering | string.ascii_lowercase |
# Eksempel med datetime
import datetime
naa = datetime.datetime.now()
print(f"Dato: {naa.day}.{naa.month}.{naa.year}")
print(f"Klokke: {naa.hour}:{naa.minute:02d}")Lag ein BMI-kalkulator (kroppsmasseindeks) som brukar funksjonar for berekning og kategorisering.
def beregn_bmi(vekt_kg, hoyde_m):
"""Beregner BMI basert på vekt i kg og høyde i meter."""
bmi = vekt_kg / (hoyde_m ** 2)
return round(bmi, 1)
def bmi_kategori(bmi):
"""Returnerer BMI-kategorien basert på verdien."""
if bmi < 18.5:
return "Undervekt"
elif bmi < 25:
return "Normalvekt"
elif bmi < 30:
return "Overvekt"
else:
return "Fedme"
# Hovedprogram
print("=== BMI-kalkulator ===")
vekt = float(input("Vekt (kg): "))
hoyde = float(input("Høyde (m): "))
bmi = beregn_bmi(vekt, hoyde)
kategori = bmi_kategori(bmi)
print(f"\nDin BMI er {bmi}")
print(f"Kategori: {kategori}")Døme på køyring:
=== BMI-kalkulator ===
Vekt (kg): 70
Høyde (m): 1.75
Din BMI er 22.9
Kategori: NormalvektProgrammet er delt i to funksjonar med klare ansvarsområde: beregn_bmi() gjer berekninga og bmi_kategori() bestemmer kategorien. Teksten i trippel-hermeteikn ("""...""") er ein docstring som dokumenterer kva funksjonen gjer.
Ein god funksjon gjer éin ting og gjer han godt. Dersom ein funksjon både reknar, validerer og skriv ut resultat, bør du vurdere å dele han opp i fleire funksjonar. Dette gjer koden lettare å lese, teste og vedlikehalde. Gi funksjonane skildrande namn som fortel kva dei gjer, til dømes beregn_areal(), valider_alder(), vis_meny().
Python les koden frå topp til botn. Dersom du prøver å kalle ein funksjon før han er definert, får du ei feilmelding:
si_hei() # NameError: name 'si_hei' is not defined
def si_hei():
print("Hei!")Definer alltid funksjonane øvst i fila, og kall dei lenger ned i koden.
Oppsummering
I dette kapittelet har du lært:
- Funksjon: navngitt, gjenbrukbar kodeblokk definert med def.
- Parametere og argumenter: input til funksjonen.
- return: sender en verdi tilbake fra funksjonen.
- Scope: lokale variabler finnes bare inne i funksjonen.
- Moduler: import gjenbruker andres kode (math, random, datetime).
Noekkelbegreper
| Begrep | Forklaring |
|---|---|
| Funksjon | Gjenbrukbar navngitt kodeblokk |
| Parameter | Variabel som tar imot input til funksjonen |
| return | Sender verdi tilbake fra funksjonen |
| Scope | Hvor en variabel er tilgjengelig |
Oppgaver
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.