Lær å definere egne funksjoner, bruke parametere og returverdier, og importere moduler.
Funksjoner og gjenbruk
Tenk deg at du har skrevet kode som beregner gjennomsnittet av tre tall, og du trenger å gjøre den samme beregningen flere steder i programmet. Du kan kopiere og lime inn koden, men det fører til duplisering, feil og vanskelig vedlikehold. Funksjoner løser dette problemet.
En funksjon er en navngitt blokk med kode som du kan kalle (bruke) når som helst i programmet. Du har allerede brukt funksjoner som print(), input(), int() og range(). Nå skal du lære å lage dine egne funksjoner.
Funksjoner er et av de viktigste konseptene i programmering. De lar deg organisere koden i logiske enheter, unngå gjentakelse, og gjøre programmer lettere å lese, teste og vedlikeholde. I dette kapittelet lærer du å definere funksjoner, bruke parametere og returverdier, og importere ferdige moduler.
En funksjon er en navngitt, gjenbrukbar blokk med kode som utfører en bestemt oppgave. Funksjoner gjør det mulig å bryte ned et stort program i mindre, håndterbare deler. Du kan tenke på en funksjon som en maskin: du putter noe inn (parametere), maskinen gjør sitt arbeid, og du får noe ut (returverdi). Funksjoner defineres én gang og kan kalles (brukes) mange ganger. De viktigste fordelene med funksjoner er gjenbruk av kode, bedre organisering og enklere feilsøking.
Din første funksjon
Du definerer en funksjon med def-nøkkelordet, etterfulgt av funksjonsnavnet, parenteser 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 gangerKjøring gir:
Hei! Velkommen til programmet!
Ha det gøy!
Hei! Velkommen til programmet!
Ha det gøy!Viktig: Å definere en funksjon utfører den ikke. Koden inne i funksjonen kjøres først når du kaller funksjonen ved å skrive navnet med parenteser: si_hei().
Funksjoner med parametere
Parametere lar deg sende verdier 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 en parameter i funksjonsdefinisjonen. "Sara", "Ole" og "Kari" er argumenter som sendes til funksjonen.
Flere parametere
def presenter(fornavn, etternavn, alder):
print(f"Jeg heter {fornavn} {etternavn} og er {alder} år.")
presenter("Sara", "Hansen", 17)
presenter("Ole", "Berg", 16)Kjøring gir:
Jeg heter Sara Hansen og er 17 år.
Jeg heter Ole Berg og er 16 år.Rekkefølgen på argumentene må matche rekkefølgen på parameterne.
Returverdier med return
Funksjoner kan sende en verdi tilbake til koden som kalte dem 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, stopper funksjonen umiddelbart og sender verdien tilbake. Kode etter return i samme funksjon kjøres aldri.
Funksjoner med og uten returverdi
Funksjoner som bruker return gir en verdi tilbake som du kan lagre i en variabel eller bruke i beregninger. Funksjoner uten return (eller med bare return uten 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: Hvis funksjonen beregner noe, bruk return. Hvis funksjonen bare gjør en handling (som å skrive ut tekst), trenger du ikke return.
Returnere flere verdier
Python lar deg returnere flere verdier som en 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 en kalkulator som bruker funksjoner for de fire regneartene.
# 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)}")Eksempel på kjøring:
=== 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.3333333333333335Hver regneart er sin egen funksjon. divider()-funksjonen sjekker for divisjon med null. Hovedprogrammet kaller funksjonene og viser resultatene.
Scope bestemmer hvor i koden en variabel er tilgjengelig. Lokale variabler opprettes inne i en funksjon og eksisterer bare mens funksjonen kjører. De er ikke tilgjengelige utenfor funksjonen. Globale variabler opprettes utenfor alle funksjoner og er tilgjengelige overalt i programmet. Funksjoner kan lese globale variabler, men for å endre dem må du bruke nøkkelordet global. Som hovedregel bør du unngå globale variabler og heller bruke parametere og returverdier.
Lokale og globale variabler
# 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 regler:
1. Lokale variabler er bare tilgjengelige inne i funksjonen der de er opprettet
2. Globale variabler kan leses inne i funksjoner
3. Parametere oppfører seg som lokale variabler
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 lokalStandardverdier for parametere
Du kan gi parametere standardverdier som brukes hvis argumentet ikke sendes:
def hils(navn, hilsen="Hei"):
print(f"{hilsen}, {navn}!")
hils("Sara") # Hei, Sara!
hils("Ole", "God morgen") # God morgen, Ole!Parametere med standardverdier må komme etter parametere uten standardverdier.
Moduler - Gjenbruk andres kode
Python kommer med hundrevis av ferdige moduler som inneholder nyttige funksjoner. Du importerer en 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)Forskjellige måter å 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 standardmoduler
| Modul | Beskrivelse | Eksempel |
|---|---|---|
math | Matematiske funksjoner | math.sqrt(25), math.pi |
random | Tilfeldige tall | random.randint(1, 100) |
datetime | Dato og tid | datetime.datetime.now() |
os | Operativsystem-funksjoner | 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 en BMI-kalkulator (kroppsmasseindeks) som bruker funksjoner for beregning 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}")Eksempel på kjøring:
=== BMI-kalkulator ===
Vekt (kg): 70
Høyde (m): 1.75
Din BMI er 22.9
Kategori: NormalvektProgrammet er delt i to funksjoner med klare ansvarsområder: beregn_bmi() gjør beregningen og bmi_kategori() bestemmer kategorien. Teksten i trippel-anførselstegn ("""...""") er en docstring som dokumenterer hva funksjonen gjør.
En god funksjon gjør én ting og gjør den godt. Hvis en funksjon både beregner, validerer og skriver ut resultater, bør du vurdere å dele den opp i flere funksjoner. Dette gjør koden lettere å lese, teste og vedlikeholde. Gi funksjonene beskrivende navn som forteller hva de gjør, for eksempel beregn_areal(), valider_alder(), vis_meny().
Python leser koden fra topp til bunn. Hvis du prøver å kalle en funksjon før den er definert, får du en feilmelding:
si_hei() # NameError: name 'si_hei' is not defined
def si_hei():
print("Hei!")Definer alltid funksjonene øverst i filen, og kall dem 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.