Lesson 6

Funktioner

21

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.

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:

Här är samma kod utan alla kommentarer:

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)!

Här är samma kod utan alla kommentarer:

Comments

profile/avatar/default
Bababababa36286

Jag har följt dessa exempel. Men när jag skriver palindrom(mitt_ord) i shell så hittas inte ordet? Jag har sparat hela funktionen via ett separat dokument man ska göra. Vad gör jag för fel?

Tristan Edwards

Hejsan! palindrom(mitt_ord) ska inte anropas i Shell, utan i samma fil som funktionen ligger i. Annars vet inte Python var den ska leta efter funktionen. 😊

profile/avatar/default
Bababababa36286

Okej. Men det händer inget för mig när jag skriver palindrom(mitt_ord)  i filen funktionen ligger i.

Anna Dahl

första "mit_ord_baklanges" är med ett "t" det ska väl stå "mitt_ord_baklanges"? Hoppas kunna ge dig lite tillbaka. :-)

Tristan Edwards

@ramshultsanna: Stämmer! Nu är det rättat! :)