20 Avansert programmering - Funksjoner og biblioteker
Strukturert programmering med funksjoner, parametre, returverdier og bruk av biblioteker.
Kvifor funksjonar?
Funksjonar er byggjesteinar i god programmering. Dei lèt oss:
Gjenbruke kode
I staden for å skrive same kode fleire gonger, definerer vi ein funksjon og kallar han når vi treng han.
Organisere kode
Store program blir delte opp i mindre, handterbare delar. Kvar funksjon har éi oppgåve.
Abstrahere kompleksitet
Vi kan bruke funksjonar utan å vite nøyaktig korleis dei fungerer internt.
Forenkle testing og feilsøking
Kvar funksjon kan testast separat.
Eksempel utan funksjonar:
# 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 funksjonar
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°FFunksjonar utan returverdi:
def si_hei(navn):
print(f"Hei, {navn}!")
# Ingen return - returnerer None implisitt
si_hei("Ola") # Output: Hei, Ola!Funksjonar med fleire returverdiar:
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 2Parametrar og argument
Posisjonsargument:
Argument blir matcha med parametrar basert på rekkjefølgje.
def sett_fart(motor, hastighet):
print(f"Motor {motor} settes til {hastighet}%")
sett_fart(1, 75) # Motor 1 settes til 75%Namngjevne argument (keyword arguments):
Argument blir spesifiserte med parameternamn.
sett_fart(hastighet=50, motor=2) # Motor 2 settes til 50%Standardverdiar:
Parametrar kan ha standardverdiar som blir brukte viss ikkje anna blir oppgjeve.
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 tal på argument:
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)) # 100Bibliotek og modular
Kva er eit bibliotek/modul?
Ei samling førehandsskrivne funksjonar og klassar som kan importerast og brukast i programmet ditt.
Importere heile modulen:
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.sin(math.pi/2)) # 1.0Importere spesifikke funksjonar:
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)Vanlege Python-bibliotek:
- math: Matematiske funksjonar
- random: Tilfeldig talgenerering
- time: Tids- og forseinkingsfunksjonar
- os: Operativsystem-interaksjon
- json: JSON datahandtering
- requests: HTTP-førespurnader
- numpy: Numeriske utrekningar
- serial: Seriell kommunikasjon (pySerial)
Arduino bibliotek:
Blir installerte via Library Manager i Arduino IDE.
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal.h>
Servo myServo;
myServo.attach(9);
myServo.write(90);Skriv ein Python-funksjon som reknar ut arealet av ein sirkel gjeve radius.
Skriv ein funksjon som tek ei temperaturliste og returnerer både minimum, maksimum og gjennomsnitt.
Kva er skilnaden mellom "import math" og "from math import sqrt"?
Skriv ein funksjon med standardverdiar som reknar ut motstanden i ein LED-krets: R = (Vforsyning - Vled) / Iled. Lat Vled ha standardverdi 2V og Iled ha standardverdi 20mA.
Forklar kva ein "docstring" er og kvifor han er nyttig.
Design eit sett med funksjonar for å styre ein robot med to motorar. Lag funksjonar for: framover(hastighet, tid), bakover(hastighet, tid), svingvenstre(grader), svinghoyre(grader), og stopp().
Lag ein modul (bibliotek) for å arbeide med Ohms lov. Inkluder funksjonar for å rekne ut spenning, straum 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.