9. Datatyper
Vi har pratat runt det här med datatyper ett tag, men nu är det dags att summera vad en datatyp egentligen är.
1. Vad är en datatyp?
En datatyp är en väldefinierad sorts information som ett datorprogram kan använda. Datatypen fungerar lite grann som en etikett eller en innehållsdeklaration. Den talar om vilka dataobjekt som ingår i typen, alltså vilken domän som typen har, samt vilka operationer som är tillåtna. Datatypen beskriver hur objekten ser ut och vad man kan göra med dem. De flesta programspråk har ett antal inbyggda datatyper. De är oftast ganska lika varandra mellan olika språk. Dessutom finns det ofta möjlighet för oss utvecklare att definiera egna datatyper.
Exempel på enkla datatyper i Python:
Datatyp | Domän | Exempel på objekt |
---|---|---|
int | Heltal | 42 |
float | Flyttal | 3.14 |
Exempel på sammansatta datatyper i Python:
Datatyp | Domän | Exempel på objekt |
---|---|---|
str | Strängar | 'simon' |
list | Listor | [1, 2, 3, 4, 5] |
Hur kan man få reda på vilken datatyp en literal eller identifierare har?
Om vi har en variabel, men inte vet vilken datatyp den har, eller om vi bara är nyfikna på vilken typ en viss konstant har, då finns det två sätt att ta reda på datatypen: type()
och isinstance()
. Den inbyggda funktione type()
returnerar vilken datatyp någonting är medan isinstance()
kollar om det första indatat är av den typ som det andra indatat anger. Följande exempel illustrerar hur det funkar:
>>> type(2.78)
<class 'float'>
>>> x = 5
>>> type(x) == int
True
>>> isinstance([1,2,3],list)
True
2. Dynamisk typning
I en del andra programspråk behöver man deklarera en variabel för att tala om att ett visst namn faktiskt är namnet på en variabel, och inte något annat (t.ex. ett funktionsnamn) eller kanske bara en felstavning. Här är ett exempel från programspråket JavaScript:
var x;
= 10;
x
var min_variabel = 20;
= 10; // Fel upptäcks: Har inte deklarerat min_varaibel min_varaibel
Om man måste deklarera en variabel är det också vanligt att man ska tala om vilken datatyp den har. Så är det t.ex. i programspråket C:
int c = 10;
float d = 3.14;
// Fel upptäcks: Kan inte stoppa in ett flyttal i en int-variabel c = d;
Men i Python har en variabel ingen fixerad datatyp. Det finns inte "heltalsvariabler" och "flyttalsvariabler", utan bara "vad-som-helst-variabler" som kan ha värden från vilken datatyp som helst.
Python tillämpar dynamisk typning vilket innebär:
Variabelns nuvarande värde har en datatyp. Om
x==10
så innehållerx
just nu ett heltal, och omx==3.14
innehållerx
just nu ett flyttal.Man kan dynamiskt (när som helst) ändra värdet på en variabel till ett nytt värde av en annan datatyp. Under sin livstid kan alltså en variabel ha innehållit värden från många olika datatyper.
>>> a = 42 # Nu innehåller a ett heltal
>>> print(a)
42
>>> b = "spam"
>>> a = b # Nu innehåller a en sträng
>>> print(a)
spam
I kursen Objektorienterad programmering och Java, som du kommer läsa i vår, så kommer vi att gå in djupare på den här skillnaden och dess konsekvenser.
3. Metoder
Metoder är specialiserade funktioner som hör till en viss datatyp. Man kan allts inte köra dem utan att ha ett objekt av rätt typ. Det ser ut på följande sätt:
dataobjekt.metod(argument)
Det här sättet att anropa metoder brukar kallas punktnotation.
Datatypen str
har en mängd inbyggda metoder, t.ex. upper()
:
>>> "Korvbröd".upper()
'KORVBRÖD'
upper()
är alltså inte en fristående funktion som råkar arbeta med strängar. I stället är det själva strängen som har egen funktionalitet. Det är strängen som kan skapa en kopia på sig själv där alla små bokstäver ersatts med stora bokstäver. En konsekvens är att man inte skickar in strängen som en vanlig funktionsparameter, utan att den istället står först för att indikera att det är strängen som så att säga utför jobbet.
Vi kommer inte att lära oss att skriva egna metoder i den här kursen, men vi kan använda de inbyggda metoderna för t.ex. strängar.
4. Hjälp
Python har en inbyggd funktion help()
som kan visa upp den medföljande dokumentationen. För att se en lista med tillgängliga metoder för ett heltal kan du skriva help(int)
direkt vid Python-prompten. Du kan också skriva help(42)
med ett exempel på ett heltal. Dokumentationen är lång, så troligen kommer du att behöva skrolla förbi en massa interna metoder som börjar och slutar med __. Skrolla nedåt med Enter (en rad i taget) eller mellanslag (en sida i taget). Tryck q för att komma tillbaks till Python-prompten.
Om du skriver help(list)
och skrollar ner en bit hittar du t.ex. denna förklaring på metoden index()
:
| index(...)
| L.index(value, [start, [stop]]) -> integer -- return first index of value.
| Raises ValueError if the value is not present.
L står för objektet metoden körs på, alltså listan. Argument inom hakparenteser är frivilliga. Efter pilen visas datatypen som returvärdet har, sedan följer en kort förklaring av metoden.
Ett annat sätt att hitta samma informaton, där det är lättare att söka och bläddra, är förstås Python-dokumentationen på webben. Den finns på webbplatsen doc.python.org. I tidigare kapitel har vi redan hänvisat till olika delar av dokumentationen, i extramaterialet.
Som nybörjare kan dokumentationen upplevas som krånglig och snårig, men du bör ändå öva på att hitta svaren på dina frågor här. Avsnittet Language reference är förstås bra att söka i, liksom avsnittet Library reference.
Sammanfattning
- Python har enkla datatyper (t.ex. int, float) och sammansatta datatyper (t.ex. list, str).
- Vi kan ta reda på datatypen för en variabel eller literal med
type()
ellerisinstance()
. - Python har dynamisk typning, vilket innebär att vi inte behöver deklarera variabler. Och under en variabls livstid kan den komma att innehålla många olika datatyper.
- Metoder är specialiserade funktionen som hör till en viss datatyp. För att anropa dem används punktnotation.
- Vi kan få hjälp via det inbyggda kommandot
help()
eller genom att kika i Python-dokumentationen på webben.
Extramaterial
Sidansvarig: Peter Dalenius
Senast uppdaterad: 2025-08-06