Att skapa och använda egna funktioner i Python är enklare än i många andra språk. Denna enkelheten kommer mycket från att vi i Python kan returnera i princip vad som helst, inte bara heltal och flyttal som är fallet i många andra språk. I andra språk måste vi ofta ta till knep som pekare för att kunna returera exempelvis strängar. Något sådant behövs inte Python, allt detta sköts i bakgrunden i Python.

En första funktion

Här visas ett komplett litet Python-program med en egen funktion. Just denna funktion returnerar inte något värde, utan skriver ut resultatet på skärmen direkt.

#!/usr/bin/env python3

def hej():
    print ("Nu ska vi lära oss om funktioner i Python")

hej()

Utdatan från detta programmet när vi kör det är helt enkelt bara meningen “Nu ska vi lära oss om funktioner i Python”. Notera att om vi inte hade anropat funktionen hej() på den sista raden så hade ingenting skrivits ut på skärmen. Då hade bara funktionen definierats och sedan hade programmet avslutats. En funktion utför bara något när vi explicit anropar den.

Det som händer är att vi först skapar en funktioner som vi definierar med def-kommandot. Vi anger att funktionen ska heta hej och att funktionen inte ska ta några argument genom att inte skriva något innanför parenteserna. När vi sedan anropar funktionen körs den indenterade koden som står under def hej():.

Argument?

Vi nämnde precis att vår funktion inte tar några argument, vad är då detta för något? Jo, för att en funktion verkligen ska vara användbar så ska vi ju helst kunna mata den med någon form av indata. Låt oss exempelvis anta att vi vill göra en enkel funktion för att skriva ut kvadraten på ett tal. Vi vill då ange talet till funktionen och få svaret som svar på skärmen.

#!/usr/bin/env python3

def kvadrat(tal):
    print ("Kvadraten på " + str(tal) + " är: " + str(tal**2))

kvadrat(5)

Här har vi skapat ett sådant enkelt program. Nu tar vår funktion kvadrat ett argument, nämligen variabeln tal. Vi använder sedan tal inuti funktionen för att skriva ut vad kvadraten på tal blir med tal**2. Två styck asterisker i Python betyder “upphöjt till”, i detta fallet tal upphöjt till två. I vårt program angav vi sedan 5 som argument till funktionen när vi anropade den, och svaret vi får är 25.

Returnera istället för att skriva ut

Istället för att skriva ut resultatet på skärmen som vi gjorde precis så hade det ju faktiskt varit bättre om vi kunde spara resultatet i en ny variabel för att sedan kunna utföra nya beräkningar. Det är just detta som returvärden används för. Vi skriver nu om vår funktion för att returnera värdet istället för att bara skriva ut det. Vi vill nu inte längre ha med hela meningen “Kvadraten på…” utan bara själva talet, annars kan vi inte utföra beräkningar med resultatet.

#!/usr/bin/env python3

def kvadrat(tal):
    return (tal**2)

x = kvadrat(5)
print ("Nu har vi sparat resultatet i x och x är: " + str(x))
print ("Vi kan nu utföra nya beräkningar med resultatet, t.ex.")
print ("x * 10 = " + str(x*10))

Resultatet från koden ovan blir:

Nu har vi sparat resultatet i x och x är: 25
Vi kan nu utföra nya beräkningar med resultatet, t.ex.
x * 10 = 250

Avslutning

Nu har vi faktiskt lärt oss grunderna i hur funktioner fungerar i Python! Mycket svårare än så här är det faktiskt inte.