Funksjoner
Kort fortalt er en funksjon er en ferdig definert oppskrift som kan utføre en oppgave.
Funksjoner defineres med nøkkelordetdefog kjøres med enkle parenteser med argumenter inne i parentesene(parameter1, parameter2, ..)
Oppgaver
Section titled “Oppgaver”- Harvard CS50: Problem Set 0 (oppgavene er under punkt 7 og hopp over “Before you begin”)
- Uio Trix: funksjoner
Filmer
Section titled “Filmer”Introduksjon til funksjoner
Section titled “Introduksjon til funksjoner”Returverdier
Section titled “Returverdier”En visuell gjennomgang
Section titled “En visuell gjennomgang”Hvor liten skal en funksjon være?
Section titled “Hvor liten skal en funksjon være?”Notater
Section titled “Notater”Innebygde funksjoner
Section titled “Innebygde funksjoner”Python kommer med et sett med innebygde funksjoner, f.eks.:
print()- printer i terminaleninput()- ber brukeren om å skrive inn noelen()– finner lengden på en liste eller tekstsum()– summerer tall i en listemax()ogmin()– finner største og minste verdiset()– fjerner duplikater- Alle innebygde funksjoner i Python (docs.python.org/3/library/functions)
lærere = ["Hafnor", "Gade", "Manikarnika", "Thorsen", "Gade"]len(lærere)max(lærere)min(lærere)
list(set(lærere))str(int("0120"))Funksjoner fra moduler
Section titled “Funksjoner fra moduler”I tillegg til innebygde funksjoner kan vi importere moduler med flere funksjoner.
Eksempel random-modulen
Section titled “Eksempel random-modulen”# importerer random-modulen og kjører funksjonen randint fra# random-moudlen med dot-notasjonimport randomtall = random.randint(10, 100) # dot-notasjon# alternativt: importerer funksjonene choice og randint fra# random-modulen, trenger ikke dot-notasjonfrom random import choice, randintlærere = ["Hafnor", "Gade", "Manikarnika", "Thorsen", "Gade"]beste_lærer = choice(lærere)Egne funksjoner
Section titled “Egne funksjoner”Vi kan også lage egne funksjoner med nøkkelordet def.
# enkel funksjondef hei_verden(): print("Hallo, verden!")
hei_verden()hei_verden()
# med argumenterdef hei_navn(navn): print(f"Hallo, {navn}!")
hei_navn("Thor")hei_navn("Ravi")
# argument med standardverdi,# standardverdien settes hvis ikke den sendes inn som argumentdef hei_sveis(navn="verden"): print(f"Hallo, {navn}!")
hei_sveis()hei_sveis("Vegar")
# mange argumenterdef hei_til_to(navn1, navn2): print(f"Hallo, {navn1} og {navn2}!")
hei_til_to("Cecilie", "Ingrid")
# uendelig mange argumenter med *# *navn blir til en listedef hei_til_mange(*navn): print(f"Hallo", end="") for enkeltnavn in navn: print(f", {enkeltnavn}", end="") print("!")
hei_til_mange("Ravi", "Cecilie", "Fredrik", "Peder", "Vegar")Returverdier
Section titled “Returverdier”Funksjoner kan også returnere verdier med nøkkelordet return
# Eksempel på funksjoner med returverdierdef beregn_areal(bredde, høyde): return bredde * høyde
def er_myndig(alder=0): if alder >= 18: return True else: return False
alder = int(input("Hvor gammel er du? "))if er_myndig(alder): print("Fett, du kan ta lappen!")else: print("Sorry, kompis!")Ryddigere kode med funksjoner
Section titled “Ryddigere kode med funksjoner”Etter hvert som vi lager større og større programmer, blir det viktigere og viktigere å lage en strukturert kode som er enkel å jobbe med. Og funksjoner er et veldig godt hjelpemiddel for å strukturere kode.
Eksempelet under viser to koder som gjør det samme, den første koden er uten funksjoner, mens den siste koden er delt opp i flere små funksjoner.
Små funksjoner med gode navn som aller helst bare gjør én ting, er veldig fine å gjenbruke - legg merke til de tre første linjene i funksjonen print_vær i det siste eksempelet.
# Uten funksjonerimport requests
"""Sandvika 59.88, 10.52Trondheim 63.43, 10.39"""
# Henter værdata for Sandvika, Bærumurl = "https://api.met.no/weatherapi/locationforecast/2.0/compact"params = {"lat": 59.88, "lon": 10.52} # Sandvika, Bærumheaders = {"User-Agent": "SandvikaVGS/1.0"} # kreves av MET APIrespons = requests.get(url, params=params, headers=headers)
data = respons.json()temperatur = data["properties"]["timeseries"][0]["data"]["instant"]["details"]["air_temperature"]vind = data["properties"]["timeseries"][0]["data"]["instant"]["details"]["wind_speed"]
print("Været i Sandvika akkurat nå:")print("Temperatur:", temperatur, "°C")print("Vind:", vind, "m/s")# Med funksjonerimport requests
def hent_værdata(lat, lon): url = f"https://api.met.no/weatherapi/locationforecast/2.0/compact?lat={lat}&lon={lon}" headers = { "User-Agent": "SandvikaVGS/1.0" } respons = requests.get(url, headers=headers) return respons.json()
def værdetalj_nå(data, detalj): return data["properties"]["timeseries"][0]["data"]["instant"]["details"][detalj]
def print_vær(navn, lat, lon): data = hent_værdata(lat, lon) temperatur = værdetalj_nå(data, "air_temperature") vind = værdetalj_nå(data, "wind_speed")
print(f"Været i {navn} akkurat nå:") print("Temperatur:", temperatur, "°C") print("Vind:", vind, "m/s")
print_vær("Trondheim", "59.88", "10.52")print_vær("Sandvika", "63.43", "10.39")