Gå till index

Introduktion till Data Science med Python

0% färdig
0/9 Steps
avsnitt 5 av 9
Pågår

Funktioner i Python: inbyggda, egna funktioner och moduler

Fredrik Svensson februari 24, 2020

Funktioner (functions) i Python

Funktioner ingår i all programmering. En funktion är ett kodstycke som genomför en process. En funktion kan innehålla en eller flera variabler, operander, loopar, villkor etc. Funktioner kan således vara allt ifrån enkla till mycket komplicerade. Att kunna skriva funktioner är avgörande för att skriva effektiv och reproducerbar kod. Inom all programmering är det nämligen viktigt att tillämpa en princip som kallas DRY (Don’t Repeat Yourself), vilket innebär att man skall undvika att upprepa kod. Att upprepa kod är i princip alltid fel. För att arbeta enligt DRY så är funktioner essentiella. I Python finns dessutom många inbyggda (built-in) funktioner. Funktionen len() är en inbyggd funktion som räknar antal tecken i en sträng. Funktionen read_csv finns i biblioteket pandas och den funktionen används för att läsa in CSV-filer till Python. Utöver inbyggda funktioner och funktioner som aktiveras via bibliotek så kan man alltså skapa egna funktioner.

Man skapar en funktion använder man def. Efter def (förkortning för definition) skriver man namnet på funktionen. Namngivning av funktioner följer samma regler som namngivning av variabler. Efter namnet skriver man ut två parenteser() följt av kolon :.

Nu skapar vi en funktion som heter hej. Denna funktionen skriver ut namnet på en person.

namn = "Sigismund"

def hej():
    print("Hej, hur mår du, ", namn)

# Vi använder funktionen genom att anropa den
prata()

# Resultat: Hej, hur mår du, Sigismund

I ovanstående exempel är följande parentes tom def hej(). Inuti parentesen deklarerar man funktionens parametrar (argument). I en funktion kan man använda variabler som definierats inuti funktionen eller utanför funktionen.

Nu skapas en funktion som kallas klass och det enda argumentet i funktionen är alder. Om ålder är mindre än 10 så skrivs strängen ”Barn” ut och annars skrivs ”Vuxen”. Vi använder funktionen genom att skriva klass(alder=x) där x är åldern vi vill utvärdera i funktionen.

def klass(alder):
    if(alder<10):
        print("Barn")
    else:
        print("Vuxen")
        
klass(alder=11)

Du kan skapa nya variabler inuti en funktion och använda variabeln i funktionen. Härnäst skapas variabeln saknas som specificerar hur många år som fattas tills 18 års ålder.

# Skapar funktionen
# Observera att det finns en kommentar mitt i funktionen
def klass(alder):
    if(alder<18):
        kvar = 18-alder '''beräkna år kvar till 18 år'''
        print("Du har ", kvar, " år kvar innan du får handla")
    else:
        print("Du får handla")

# Använd funktionen och testa ålder = 10  
klass(alder=10)

# Resultat: Du har 8 år kvar innan du får handla

Programmering i Python underlättas markant av att skriva bra funktioner. Man kan åstadkomma mycket med de inbyggda funktionerna i Python men som regel krävs att man antingen aktiverar funktioner tillgängliga i andra bibliotek, eller skapar egna funktioner. I nästa funktion skapar vi en kostnadsberäkning.

# Funktionen har tre argument (produkt1, produkt2, produkt3)
# Varje argument är priset på en produkt
def summa(produkt1, produkt2, produkt3):
    kostnad = produkt1+produkt2+produkt3
    print("Total kostnad: ", kostnad)

# Testa funktionen med tre priser
summa(99, 199, 1999)

Observera att ovanstående funktion har tre argument (produkt1,produkt2, produkt3). Genom att definiera dessa argument kan vi använda funktionen i fler sammanhang och vi kan mata in valfria värden på argumenten. De argument som används i en funktion skall deklareras inom parentesen efter funktionens namn. Argumenten separeras med kommatecken , mellan argumenten.

När man anropar en funktion kan argumentens värden specificeras explicit. I följande exempel specificerar vi argumenten i samma ordning som de deklareras i funktionen:

summa(produkt1=99, produkt2=199, produkt3=1999)

Men vi kan också välja en valfri ordning på argumenten; detta påverkar inte beräkningen:

summa(produkt3=99, produkt2=199, produkt1=1999)

Man kan faktiskt använda funktionen helt utan att skriva ut argumentens namn, som följer:

summa(99, 199, 1999)

I ovanstående exempel skrev vi summa(99, 199, 1999) vilket innebär att vi aldrig skrev ut argumentens namn. I det fallet kommer Python automatiskt använda värdena i kronologisk ordning. 99 kommer användas som första argument (produkt1); 199 kommer användas som andra argument (produkt2); 1999 kommer användas som tredje argument (produkt3). Denna principen gäller alla funktioner i Python.

I Python kan funktionerna ha valfritt antal argument. Vissa funktioner har endast ett argument, medan andra funktioner kan ha hundratals argument. En logisk fråga är: vad händer om vi utelämnar värdet på ett argument? Vi provar med funktionen summa() som vi skapade ovan.

summa(100, 100) # vi anger bara 2 av 3 argument

# Resultat: TypeError: summa() missing 1 required positional argument: 'produkt3'

Det gick inte att köra ovanstående kod eftersom det saknas värde på ett argument. Enligt felmeddelandet krävs att ett värde på produkt3 anges. Man kan dock komma runt detta genom att ange default-värden för argumenten. Man kan ange default-värden för alla argument; då kommer funktionen använda default-värdet om inget värde specificeras.

Det är enkelt att ange default-värden i Python. Ett exempel följer:

# Nu anges default-värden för varje produkt
def summa(produkt1=100, produkt2=200, produkt3=300):
    kostnad = produkt1+produkt2+produkt3
    print("Total kostnad: ", kostnad)

# Testa funktionen utan att specificera argument
summa()

# Resultat: Total kostnad:  600

Som framgår ovan så kommer funktionen använda default-värden eftersom vi inte specificerar värden på argumenten när vi skriver summa(). Då blir den totala kostnaden 600, vilket är summan av default-värdena.

Att returnera värden i en funktion

Hittills har vi skapat en funktion som beräknar summan av flera produkter och skriver ut totalsumman som ett meddelande med hjälp av print(). Ponera nu att vi först vill beräkna totalkostnaden för att sedan använda summan i en annan funktion. Detta kräver att totalsumman sparas i en variabel. För att göra detta i Python måste man använda return. Efter return skriver vi namnet på variabeln vars värde vi önskar att funktionen skall returnera.

# Skapar funktion som returnerar totalkostnad
def summa(produkt1=100, produkt2=200, produkt3=300):
    kostnad = produkt1+produkt2+produkt3
    return kostnad

# Använder funktionen för att spara totalsumman i en ny variabel
mitt_pris = summa(22, 33, 44)

I exemplet ovan användes funktionen summa(), som returnerar värdet på variabeln kostnad, för att skicka värdet till variabeln mitt_pris. Vi kunde självklart ha skapat en funktion som också innehåller .

# Skapar funktion som returnerar totalkostnad
def summa(produkt1=100, produkt2=200, produkt3=300):
    kostnad = produkt1+produkt2+produkt3
    print("Totalsumman har sparats")
    return kostnad

# Använder funktionen för att spara totalsumman i en ny variabel
mitt_pris = summa(22, 33, 44)

Viktiga inbyggda funktioner i Python

Python innehåller många inbyggda funktioner. Dessa används ofta och det är viktigt att kunna utnyttja dem på rätt sätt. Funktionerna används på samma sätt som de funktioner man skapar själv. Vissa funktioner innehåller många argument och man glömmer ofta hur argumenten skall specificeras. I Spyder använder man funktionen för att få anvisningar till en funktion.

# Importerar biblioteket "os", med vilket vi kommunicerar med operativsystemet
import os

# Vi har glömt hur funktionen "chdir" används och begär hjälp
help(os.chdir)

# Resultat:
# help(pd.read_csv)
# Help on function read_csv in module pandas.io.parsers:
# read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', [...]

I Python finns följande inbyggda funktioner:

  Built-in Functions  
abs()dict()help()min()setattr()
all()dir()hex()next()slice()
any()divmod()id()object()sorted()
ascii()enumerate()input()oct()staticmethod()
bin()eval()int()open()str()
bool()exec()isinstance()ord()sum()
bytearray()filter()issubclass()pow()super()
bytes()float()iter()print()tuple()
callable()format()len()property()type()
chr()frozenset()list()range()vars()
classmethod()getattr()locals()repr()zip()
compile()globals()map()reversed()__import__()
complex()hasattr()max()round() 
delattr()hash()memoryview()set() 

Exempel på inbyggda funktioner i Python

str()

Denna funktionen konverterar en godtycklig variabel till en sträng-variabel (eng. string).

# Vi skapar en variabel som vi tillskriver värdet 100
variabel = 100

# Python definierar variabeln automatiskt som numerisk
# Vi kan kontrollera detta med type() som redovisar vilken typ en variabel är
type(variabel)

# Resultat: "int"
# Enligt type() är alltså variabeln ett heltal (int = integer)

# Nu konverterar vi variabeln till en sträng
ny_variabel = str(variabel)

type(ny_variabel)
# Resultat: "str"
# Enligt type() är nu variabeln ett en sträng (str = string)

len()

Med denna funktionen beräknas längden på ett element. Om vi använder funktionen på en sträng så kommer den beräkna antal bokstäver (tecken) i strängen. Exempel följer:

namn = "Daniel Svensson"
len(namn)

# Resultat: 15

I ovanstående exempel räknar len() antal bokstäver i namnet ”Daniel Svensson”. Men funktionen kan också användas för att beräkna antal element i andra objekt (variabler, data frames, listor etc). Låt oss använda funktionen för att beräkna antal siffror i en lista:

siffror = list(range(0, 33))
len(siffror)

# Resultat: 33

int()

Med funktionen int() kan man omvandla en numerisk variabel till ett heltal. Funktionen avrundar inte talet, utan eliminerar alla decimalerna istället.

siffra = 10.483763
int(siffra)

# Resultat: 10

Du kan läsa mer om alla inbyggda funktioner via länkarna o tabellen ovan.

0/5 (0 Reviews)