20 Avansert programmering - Funksjoner og biblioteker
Strukturert programmering med funksjoner, parametre, returverdier og bruk av biblioteker.
Hvorfor funksjoner?
Funksjoner er byggesteiner i god programmering. De lar oss:
Gjenbruke kode
I stedet for å skrive samme kode flere ganger, definerer vi en funksjon og kaller den når vi trenger den.
Organisere kode
Store programmer deles opp i mindre, håndterbare deler. Hver funksjon har én oppgave.
Abstrahere kompleksitet
Vi kan bruke funksjoner uten å vite nøyaktig hvordan de fungerer internt.
Forenkle testing og feilsøking
Hver funksjon kan testes separat.
Eksempel uten funksjoner:
# Beregn areal av tre rektangler
areal1 = 5 * 3
areal2 = 7 * 4
areal3 = 10 * 2Eksempel med funksjon:
def beregn_areal(lengde, bredde):
return lengde * bredde
areal1 = beregn_areal(5, 3)
areal2 = beregn_areal(7, 4)
areal3 = beregn_areal(10, 2)Definere og kalle funksjoner
Python syntaks:
def funksjonsnavn(parameter1, parameter2):
"""Dokumentasjonsstreng (docstring)"""
# Kode som utfører oppgaven
return resultatEksempel:
def celsius_til_fahrenheit(celsius):
"""Konverterer temperatur fra Celsius til Fahrenheit."""
fahrenheit = (celsius * 9/5) + 32
return fahrenheit
# Kalle funksjonen
temp_f = celsius_til_fahrenheit(20)
print(f"20°C er {temp_f}°F") # Output: 20°C er 68.0°FFunksjoner uten returverdi:
def si_hei(navn):
print(f"Hei, {navn}!")
# Ingen return - returnerer None implisitt
si_hei("Ola") # Output: Hei, Ola!Funksjoner med flere returverdier:
def del_med_rest(a, b):
kvotient = a // b
rest = a % b
return kvotient, rest
k, r = del_med_rest(17, 5)
print(f"17 / 5 = {k} rest {r}") # Output: 17 / 5 = 3 rest 2Parametre og argumenter
Posisjonsargumenter:
Argumenter matches med parametre basert på rekkefølge.
def sett_fart(motor, hastighet):
print(f"Motor {motor} settes til {hastighet}%")
sett_fart(1, 75) # Motor 1 settes til 75%Navngitte argumenter (keyword arguments):
Argumenter spesifiseres med parameternavn.
sett_fart(hastighet=50, motor=2) # Motor 2 settes til 50%Standardverdier:
Parametre kan ha standardverdier som brukes hvis ikke annet oppgis.
def blink_led(antall=3, forsinkelse=500):
for i in range(antall):
led_on()
delay(forsinkelse)
led_off()
delay(forsinkelse)
blink_led() # Bruker standardverdier: 3 blink, 500ms
blink_led(5) # 5 blink, 500ms
blink_led(2, 100) # 2 blink, 100msVariabelt antall argumenter:
def summer(*tall):
"""Summerer vilkårlig antall tall."""
total = 0
for t in tall:
total += t
return total
print(summer(1, 2, 3)) # 6
print(summer(10, 20, 30, 40)) # 100Biblioteker og moduler
Hva er et bibliotek/modul?
En samling forhåndsskrevne funksjoner og klasser som kan importeres og brukes i ditt program.
Importere hele modulen:
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.sin(math.pi/2)) # 1.0Importere spesifikke funksjoner:
from math import sqrt, pi
print(pi) # 3.141592653589793
print(sqrt(25)) # 5.0Importere med alias:
import numpy as np
import matplotlib.pyplot as plt
data = np.array([1, 2, 3, 4, 5])
plt.plot(data)Vanlige Python-biblioteker:
- math: Matematiske funksjoner
- random: Tilfeldig tall generering
- time: Tids- og forsinkelse funksjoner
- os: Operativsystem-interaksjon
- json: JSON data håndtering
- requests: HTTP-forespørsler
- numpy: Numeriske beregninger
- serial: Seriell kommunikasjon (pySerial)
Arduino biblioteker:
Installeres via Library Manager i Arduino IDE.
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal.h>
Servo myServo;
myServo.attach(9);
myServo.write(90);Skriv en Python-funksjon som beregner arealet av en sirkel gitt radius.
Skriv en funksjon som tar en temperaturliste og returnerer både minimum, maksimum og gjennomsnitt.
Hva er forskjellen mellom "import math" og "from math import sqrt"?
Skriv en funksjon med standardverdier som beregner motstanden i en LED-krets: R = (Vforsyning - Vled) / Iled. La Vled ha standardverdi 2V og Iled ha standardverdi 20mA.
Forklar hva en "docstring" er og hvorfor den er nyttig.
Design et sett med funksjoner for å styre en robot med to motorer. Lag funksjoner for: framover(hastighet, tid), bakover(hastighet, tid), svingvenstre(grader), svinghoyre(grader), og stopp().
Lag en modul (bibliotek) for å arbeide med Ohms lov. Inkluder funksjoner for å beregne spenning, strøm og motstand, samt effekt.
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.