If-setninger, for-løkker og while-løkker.
Skriv én gang, bruk mange ganger
Når programmene dine vokser, oppdager du fort et problem: du skriver den samme koden om og om igjen. Det er både kjedelig og farlig -- finner du en feil, må du rette den overalt. Løsningen er funksjoner: navngitte blokker med kode du kan kalle så mange ganger du vil.
I dette kapittelet lærer du å definere egne funksjoner med def, sende inn data med parametre, hente ut resultater med returverdier, og bruke ferdige funksjoner andre har laget gjennom moduler. Dette er nøkkelen til å skrive kode som er ryddig, gjenbrukbar og lett å vedlikeholde.
Funksjoner og parametre
En funksjon er en navngitt blokk med kode som gjør en bestemt oppgave. Du definerer den med nøkkelordet def, og du kaller den ved å skrive navnet med parenteser. Definerer du def hils(): med to print-linjer inni, skjer ingenting før du faktisk skriver hils() -- og da kan du kalle den så mange ganger du vil. Som med variabler bør funksjonsnavn være beskrivende og skrives i snake_case, som beregn_areal eller les_temperatur.
Det som virkelig gjør funksjoner kraftige, er parametre -- de lar deg sende inn ulike data hver gang. Skriver du def hils_person(navn):, er navn en parameter, og når du kaller hils_person("Ola"), er "Ola" et argument. Du kan ha flere parametre skilt med komma, som def beskriv_maling(sted, temperatur, tid):. Du kan til og med gi en parameter en standardverdi: def beregn_kraft(masse, akselerasjon=9.81): bruker 9,81 hvis du ikke oppgir noe annet, men lar deg overstyre det, for eksempel med Mars-gravitasjonen.
Et typisk eksempel er temperaturomregning. Du kan lage celsius_til_fahrenheit(celsius), som regner ut , og en motsatt funksjon fahrenheit_til_celsius(fahrenheit). Hver har et tydelig navn og én parameter, og ved å pakke beregningen inn i en funksjon kan du gjenbruke den med hvilke verdier du vil -- 0, 100, eller hva som helst -- uten å skrive formelen på nytt.
Returverdier: å hente noe tilbake
En funksjon kan gjøre mer enn å skrive ut -- den kan returnere en verdi tilbake til stedet den ble kalt fra, med nøkkelordet return. Det er en avgjørende forskjell. Skriver du def beregn_areal(radius): som slutter med return areal, kan du fange opp resultatet: mitt_areal = beregn_areal(5.0), og bruke det videre.
Forskjellen mellom print() og return er viktig å forstå. print() viser bare verdien på skjermen, men lagrer den ikke -- den er borte med en gang. return derimot sender verdien tilbake, slik at du kan lagre den i en variabel og regne videre med den. En funksjon med print kan du beundre; en funksjon med return kan du bruke. Du kan også returnere flere verdier på en gang ved å skille dem med komma: return areal, omkrets, og fange dem opp med a, o = beregn_sirkel(5.0).
Dette gjør funksjoner til perfekte byggesteiner for dataanalyse. Du kan lage beregn_gjennomsnitt(verdier), som summerer en liste og deler på antallet med len(), og finn_maks(verdier), som går gjennom listen og holder styr på den høyeste. Begge returnerer et resultat du kan lagre og bruke videre -- som å regne både snitt og makstemperatur fra en serie målinger, og deretter skrive dem ut sammen. Et fint poeng er at funksjoner kan brukes som argumenter til andre funksjoner: doble(legg_til(3, 4)) regnes innenfra og ut, så legg_til(3, 4) blir 7, og doble(7) blir 14.
Moduler: stå på skuldrene til andre
Du trenger ikke skrive alt selv. En modul er en fil med Python-kode -- funksjoner, variabler og mer -- som kan gjenbrukes, og Python kommer med mange innebygde moduler klare til bruk. Du henter dem inn med import. Skriver du import math, får du tilgang til matematiske funksjoner som math.sqrt(25), som gir 5,0, og konstanter som math.pi. Vil du bare ha bestemte funksjoner, kan du skrive from math import sqrt, pi, og da kan du bruke sqrt(25) uten math. foran.
Noen moduler er spesielt nyttige i teknologi og forskning. math har matematiske funksjoner som kvadratrot og logaritme. random lager tilfeldige tall med random.randint() og random.uniform(). time håndterer tid og forsinkelser. Og statistics gir ferdige statistikkfunksjoner som statistics.mean() og statistics.stdev(). Tenk deg at du simulerer et eksperiment: du kan bruke math.sin() til å lage en temperatur som svinger, random.uniform() til å legge på realistisk målestøy, og statistics-modulen til å regne ut snitt og standardavvik -- alt med funksjoner andre allerede har skrevet og testet grundig.
Du kan til og med lage dine egne moduler ved å lagre funksjoner i en Python-fil og importere den i andre programmer. Det er en av Pythons store styrker: i stedet for å finne opp hjulet på nytt hver gang, bygger du på arbeidet til andre og gjenbruker din egen kode på tvers av prosjekter. En grei tommelfingerregel for hele kapittelet: hvis du kopierer den samme koden mer enn to ganger, bør du lage en funksjon av den.
Oppsummering
Vi har sett at funksjoner er navngitte, gjenbrukbare kodeblokker du definerer med def og kaller med navnet og parenteser. Parametre gjør dem fleksible ved å la deg sende inn ulike data, og standardverdier gir fornuftige forhåndsverdier.
Returverdier med return sender et resultat tilbake så du kan bruke det videre -- til forskjell fra print(), som bare viser det. Til slutt lar moduler som math, random og statistics deg bygge på ferdige, testede funksjoner i stedet for å skrive alt selv. Funksjoner og moduler gir gjenbruk, lesbarhet og enklere vedlikehold -- og regelen er: kopierer du kode mer enn to ganger, lag en funksjon.
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.