Tilbake
2.5
Funksjoner og gjenbruk

2.5 Funksjoner og gjenbruk

Lær å definere egne funksjoner, bruke parametere og returverdier, og importere moduler.

55 min
8 oppgaver
FunksjondefParameterReturverdi
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 8 oppgaver

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.

Funksjon

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 ganger

Kø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 40

Nå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 bindestreker

Tommelfingerregel: 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: 30
✏️Kalkulator med funksjonar

Lag 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.3333333333333335

Kvar rekneart er sin eigen funksjon. divider()-funksjonen sjekkar for divisjon med null. Hovudprogrammet kallar funksjonane og viser resultata.

Scope (virkeområde)

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 her

Viktige 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 lokal

Standardverdiar 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

ModulSkildringDøme
mathMatematiske funksjonarmath.sqrt(25), math.pi
randomTilfeldige talrandom.randint(1, 100)
datetimeDato og tiddatetime.datetime.now()
osOperativsystem-funksjonaros.getcwd()
stringTekstmanipuleringstring.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}")
✏️BMI-kalkulator med funksjonar

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: Normalvekt

Programmet 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.

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


BegrepForklaring
FunksjonGjenbrukbar navngitt kodeblokk
ParameterVariabel som tar imot input til funksjonen
returnSender verdi tilbake fra funksjonen
ScopeHvor en variabel er tilgjengelig

Oppgaver

Lett3 oppgaver
Medium3 oppgaver
Vanskelig2 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.