Du har en funksjon som hilser på brukeren, men navnet er hardkodet. Skal du hilse på tre forskjellige personer, trenger du tre forskjellige funksjoner. Det er åpenbart meningsløst. Parametere og returverdier i Python gjør funksjoner dynamiske: du sender inn data, funksjonen jobber med dem, og gir deg resultatet tilbake.
Parameter eller argument?
De to ordene brukes om hverandre, men det er en forskjell. Parameteren er variabelen du definerer i funksjonen. Argumentet er verdien du sender inn når du kaller den:
def hils(navn): # navn er parameteren
print(f"Hei, {navn}!")
hils("Alex") # "Alex" er argumentet
I praksis trenger du sjelden å tenke på forskjellen. Men når du leser feilmeldinger fra Python, gir det mening. "Missing 1 required positional argument" betyr at du kaller funksjonen uten å sende inn verdien den forventer.
Posisjonsargumenter følger rekkefølgen
Sender du inn flere verdier, matcher Python dem etter rekkefølge:
def del_tall(a, b):
return a / b
del_tall(10, 2) # a=10, b=2, resultat: 5.0
del_tall(2, 10) # a=2, b=10, resultat: 0.2
Rekkefølgen avgjør hva som havner hvor. Bytter du om på tallene, bytter du om på resultatet. For funksjoner med to parametere er dette uproblematisk, men med fire eller fem er det lett å rote.
Nøkkelordargumenter gjør koden tydelig
I stedet for å stole på rekkefølge, kan du navngi argumentene når du kaller funksjonen:
del_tall(a=10, b=2)
del_tall(b=2, a=10) # Samme resultat
Begge gir 5.0. Rekkefølgen spiller ingen rolle lenger, fordi Python vet hvilket argument som hører til hvilken parameter. Denne stilen er spesielt nyttig når funksjonen har mange parametere, eller når koden skal leses av andre.
Du kan også blande: send de første argumentene etter posisjon og resten med navn. del_tall(10, b=2) fungerer. Men del_tall(a=10, 2) gir en SyntaxError. Posisjonsargumenter kan ikke komme etter nøkkelordargumenter.
Standardverdier gjør parametere valgfrie
Noen ganger har en parameter en fornuftig standard. I stedet for å tvinge brukeren til å oppgi den hver gang, setter du en standardverdi:
def hils(navn, hilsen="Hei"):
print(f"{hilsen}, {navn}!")
hils("Anna") # Hei, Anna!
hils("Anna", "God dag") # God dag, Anna!
Parametere med standardverdier må alltid komme etter parametere uten. Skriver du def hils(hilsen="Hei", navn), gir Python en SyntaxError. Regelen er enkel: obligatoriske parametere først, valgfrie etterpå.
Standardverdier gjør funksjoner enklere å bruke. Tenk deg en funksjon som beregner areal:
def areal_sirkel(radius, pi=3.14159):
return pi * radius ** 2
print(areal_sirkel(5)) # 78.53975
print(areal_sirkel(5, 3.14)) # 78.5
De fleste brukere vil aldri endre verdien av pi. Men muligheten finnes for dem som trenger en annen presisjon.
Returverdier i Python
En funksjon som printer resultatet er som en kalkulator uten display. Du ser svaret, men kan ikke bruke det videre. return sender verdien tilbake til den som kalte funksjonen:
def er_partall(tall):
return tall % 2 == 0
resultat = er_partall(7)
print(resultat) # False
Funksjonen gjør beregningen og returnerer en boolsk verdi. Du kan lagre den i en variabel, bruke den i en for-løkke, eller sende den rett inn i en if-setning. Verdien som returneres kan være hva som helst: tall, tekst, lister, eller boolske verdier.
En nyttig teknikk er å bruke returverdien direkte uten å lagre den:
if er_partall(tall):
print("Tallet er partall")
Ingen mellomvariabel trengs. Funksjonen returnerer True eller False, og if-setningen bruker resultatet med en gang.
Returner flere verdier samtidig
Python lar deg returnere flere verdier som en tuple:
def analyser(tall_liste):
return min(tall_liste), max(tall_liste), sum(tall_liste)
lavest, hoyest, total = analyser([4, 8, 15, 16, 23])
print(lavest) # 4
print(hoyest) # 23
Du pakker ut verdiene direkte i separate variabler. Det gjør koden lettere å lese enn å returnere en liste og hente ut elementer med indeks etterpå. Pass på at antall variabler på venstre side matcher antall verdier funksjonen returnerer, ellers får du en ValueError.
Vanlige feil med parametere og returverdier
For mange parametere. En funksjon med åtte parametere er et tegn på at den gjør for mye. Del den opp i flere mindre funksjoner, eller samle relaterte verdier i en dictionary.
Glemmer return. Uten en return-setning gir funksjonen tilbake None. Bruker du resultatet videre i en beregning, får du en TypeError. Sjekk alltid at funksjonen faktisk returnerer det du forventer.
Mutable standardverdier. Bruker du en liste som standardverdi (def legg_til(element, liste=[])), deles listen mellom alle kall. Det er en kjent Python-felle. Løsningen ser slik ut:
def legg_til(element, liste=None):
if liste is None:
liste = []
liste.append(element)
return liste
Nå opprettes en ny liste for hvert kall. Denne feilen er så vanlig at den regnes som en av Pythons mest kjente fallgruver.
Neste steg
Nå som du forstår parametere og returverdier i Python, kan du lære å sende inn et ukjent antall argumenter med *args og **kwargs. For enklere funksjoner som kan skrives på én linje, er lambda-funksjoner et nyttig verktøy. Og du finner flere eksempler i Python-dokumentasjonen om funksjonsdefinisjoner.
Denne videoen er hentet fra kurset Python – grunnleggende på Utdannet.no. I det fulle kurset lærer du også løkker, datastrukturer og feilhåndtering med try/except.




