Lär dig programmera med Python!

Back to All Courses

Lesson 6

Funktioner

Vad är en funktion?

En funktion är ett kodblock som man lagrar för att kunna återanvända vid ett senare tillfälle. De kan innehålla variabler, operander, loopar, ja i stort sett allt!

För att skapa en funktion skriver man def följt av namnet på sin funktion (samma krav gäller som för variabelnamn), och avslutar med två parenteser och ett kolon. Varför man använder parenteser kommer vi till snart.

I exemplet nedan lagrar vi en funktion som vi kallar för prata() som skriver ut "Hej, hur mår du?" i Python Shell när den anropas.

# Vi lagrar vår funktion och berättar för Python vad den ska göra
def prata():
	print("Hej, hur mår du?")
	
# För att det faktiskt ska hända något måste vi också anropa funktionen!
prata()

Argument

Exemplet med prata är egentligen ganska vädelöst eftersom vi lika bra hade kunnat skriva print-satsen direkt istället för att gå igenom en funktion.

Funktioner blir framförallt användbara när man skickar med argument till dem. Argument är egentligen bara ett annat ord för variabler som skickas till en funktion, men det är ett väldigt effektivt sätt att utföra många kommandon på!

Argumenten skrivs innanför parenteserna i en funktion, både när man definierar dem och när man anropar dem!

I kapitlet om indexering kom vi in lite snabbt på palindrom, d.v.s. ord som är lika både fram- och baklänges. I exemplet nedan skriver vi ett enkelt program som kollar om ordet som man skrivit är ett palindrom eller inte:

# Vi definierar först funktionen
def palindrom(mitt_ord):
	# Vi sparar ordet baklänges under variabeln "mitt_ord_baklanges"
  mitt_ord_baklanges = mitt_ord[::-1]
  
	# Kolla om ordet är ett palindrom
  if (mitt_ord == mitt_ord_baklanges):
    print("Ordet är ett palindrom!")
  else:
    print("Tyvärr, inget palindrom här inte")

# HÄR BÖRJAR PROGRAMMET

# Användaren matar in sitt ord som sparas som variabeln "mitt_ord"
mitt_ord = input("Skriv ditt ord här: ")

# Funktionen palindrom anropas med argumentet "mitt_ord"
palindrom(mitt_ord)

Här är samma kod utan alla kommentarer:

def palindrom(mitt_ord):
  mitt_ord_baklanges = mitt_ord[::-1]
  
  if (mitt_ord == mitt_ord_baklanges):
    print("Ordet är ett palindrom!")
  else:
    print("Tyvärr, inget palindrom här inte")

mitt_ord = input("Skriv ditt ord här: ")
palindrom(mitt_ord)

Det som gör den här funktionen så användbar är att vi nu inte behöver skriva någon mer palindrom-kod. Varje gång vi vill kolla om ett ord är ett palindrom eller inte behöver vi bara anropa funktionen palindrom(), skicka med vårt ord som argument, och se vad Python Shell svarar!

Lokala och globala variabler

Lokala variabler är variabler som endast existerar inuti en funktion. I vår palindrom-funktion hade vi faktiskt en lokal variabel, nämligen mitt_ord_baklanges. Variabeln definierades inuti funktionen och är därför inte tillgänglig någonstans utanför. Detta betyder att efter att funktionen palindrom kört klart skulle vi t.ex. inte kunna skrivaprint(mitt_ord_baklanges). Det kommandot måste göras inuti funktionen.Motsatsen till lokala variabler är globala variabler. Ett exempel på det är mitt_ord som vi definierade utanför funktionen.

Varför är detta viktigt? Jo, inom programmering försöker man alltid att undvika globala variabler eftersom det finns många risker med variabler som alltid är tillgängliga och vars livslängd aldrig tar slut. Till exempel skulle en hackare enkelt kunna läsa av ens lösenord om det sparades som en global variabel, eller så kan ditt program krascha för att en av dina variabler som sattes för länge sen krockade med ett senare kommando. I våra exempel som vi använder här behöver man inte tänka på sånt, men när man börjar bygga stora projekt bör man alltid använda så få globala variabler som möjligt!

Return-satsen

Return-satsen används vanligtvis i slutet av en funktion för att returnera resultatet. I våra tidigare exempel har vi bara använt print för att skriva ut vad som hände, men return är egentligen mycket bättre eftersom vi då faktiskt kan använda oss av resultatet som funktionen kom fram till för framtida beräkningar eller kommandon!

Exemplet nedanför räknar ut omkretsen på en cirkel utifrån dess radie. Det ser ut som mycket kod men det är egentligen väldigt enkelt (det mesta är bara kommentarer)!

# Vi definierar vår funktion som beräknar omkretsen på en cirkel utifrån dess radie
def hittaOmkrets(radie):
  pi = 3.14 # Vi bestämmer att variabeln pi är lika med 3.14
  omkrets = 2 * pi * radie # Formeln för omkretsen
  return(omkrets)


# HÄR BÖRJAR PROGRAMMET
# Vi ber användaren mata in radien.
# Eftersom inputs alltid är av typen string...
# ...måste vi först konvertera den till ett heltal (int)
radie = int(input("Skriv in radien på din cirkel: "))

# Vi anropar funktionen hittaOmkrets() med attributet radie.
# Funktionen returnerar omkretsen som vi sparar i en variabel.
# Nu när den är sparad kan vi använda den för vad vi vill.
omkrets = hittaOmkrets(radie)

# Vi skriver ut vad omkretsen är genom att konvertera den till en sträng.
print("Omkretsen är " + str(omkrets))

Här är samma kod utan alla kommentarer:

def hittaOmkrets(radie):
  pi = 3.14			 
  omkrets = 2 * pi * radie
  return(omkrets)

radie = int(input("Skriv in radien på din cirkel: "))
omkrets = hittaOmkrets(radie)
print("Omkretsen är " + str(omkrets))