Variabler og uttrykk


Variabler

En variabel er en referanse til en verdi. En variabel kan tilordnes verdi med symbolet =. Variabelen vil deretter referere til denne verdien frem til den eventuelt tilordnes en ny verdi.

# Vi tilordner verdien 5 til variabelen x
x = 5
print(x)      # 5
print(x + 2)  # 7
print(x)      # fremdeles 5

Til forskjell fra matematikk slik vi vanligvis kjenner den, kan en variabel i Python endre verdi over tid.

y = 10      # y refererer nå til 10
y = 20      # y refererer nå til 20, forrige verdi (10) er helt glemt
print(y)    # 20
print(y)    # fremdeles 20

# Når en variabel angis, evalueres uttrykket på høyre side først; deretter
# tilordnes resultatet til variabelen angitt på venstre side

y = y + 1   # y refererer nå til 21, forrige verdi (20) er helt glemt
print(y)    # 21

Legg merke til at uttrykket y = y + 1 er en fullstending meningsfull setning å skrive i Python, mens det ville vært en selvmotsigelse å skrive det samme i matematikk. I Python skal setningen tolkes slik: «regn ut y + 1, og deretter angi denne verdien til y.»

Tilordning

En variabel tilordnes verdi ved bruk av tilordningsoperasjonen =. Det er også mulig å kombinere tilordningsoperasjonen med operasjonssymboler, slik som f. eks. += og -=.

x = 5
x += 2 # det samme som x = x + 2
print(x) # 7

y = 5
y + 2 # ingen tilordnings-operasjon her
print(y) # fremdeles 5

Tilordningsoperatøren kan kombineres med alle symbol-operasjonene.

x = 42

x += 2       # det samme som  x = x + 2
x -= 3 - 1   # det samme som  x = x - (3 - 1)
x //= 10     # det samme som  x = x // 10
x **= 5 // 2 # det samme som  x = x ** (5 // 2)
x *= 2 + 3   # det samme som  x = x * (2 + 3)
x %= 3       # det samme som  x = x % 3
x /= 3       # det samme som  x = x / 3

Når man tilordner en verdi, må venstre side av tilordningsoperatøren være variabelnavn.

x = 5      # OK
5 = x      # Feil (venstre side kan ikke være en verdi)
x + 2 = 7  # Feil (venstre side er kan ikke være et uttrykk)

Det er mulig å tilordne flere variabler verdi på samme linje.

x = y = z = 5   # alle tre variablene x, y og z refererer nå til verdien 5
print(x, y, z)  # 5 5 5

a, b = 2, 3     # a refererer nå til verdien 2, b refererer nå til verdien 3
print(a, b)     # 2 3

Ikke pensum, men kjekt å vite: fra og med python 3.8 er det også mulig å tilordne en variabel verdi i et uttrykk med bruk av := («hvalross»-operatøren).

x = 37 + (y := 3 + 2)
print(x, y) # 42 5
Uttrykk og setninger

Et uttrykk er et «regnestykke» som kan evalueres til en verdi. Det består av én eller flere verdier, variabler, operasjoner og funksjoner. Her er noen eksempler på uttrykk; både svært banale uttrykk og mer komplekse (vi antar at x, y og num_students er variabelnavn som allrede er tilordnet verdier).

Eksempler:

En setning er ett steg (ofte én linje) i et Python -program, og representerer en handling og ikke en verdi. For eksempel tilordningen av en verdi til en variabel.

Variabler referer til verdier, ikke til uttrykk

Det som står på høyresiden av tilordningsoperatøren når vi tilordner verdi til en variabel er et uttrykk. Variabelen vil være en referanse til den ferdig evaluerte verdien, og vil ikke huske hvordan uttrykket så ut.

x = 5
y = x + 2
print(x) # 5
print(y) # 7

x += 10
print(x) # 15
print(y) # fremdeles 7
Variabelnavn

Vi bestemmer selv hva variablene skal hete, så lenge de begynner med en bokstav og ikke inneholder spesielle tegn (bortsett fra _).

num_students = 800
num_group_leaders = 42
course_code = 'INF100'
99problems = True  # Krasjer, variabelnavn kan forresten ikke begynne med tall

Det er viktig å gi variablene våre navn som tydelig beskriver hva slags verdi de representerer (gjerne inkludert hvilken enhet det er). Dette gjør det enklere å lese og forstå koden. Gode variabelnavn gjør at koden vår blir selvdokumenterende.

INF100 sin stilguide for variabelnavn:

  1. Bruk selvdokumenterende variabelnavn.
  2. Bruk engelske variabelnavn.
  3. Bruk snake_case: bare små bokstaver, understrek (_) for å skille mellom ord.
  4. Ikke benytt variabelnavn som er opptatt fra før av i Python.
  1. Bruk selvdokumenterende variabelnavn. Dette er det viktigste punktet ved valg av variabelnavn.
# Dårlig
s = 'L'
# Bra
shirt_size = 'L'
  1. Bruk engelske variabelnavn. I og med at Python er basert på engelske nøkkelord, er koden ofte lettere å lese ved å benytte engelske variabelnavn. Dessuten gjør det koden mer tilgjengelig for kolleger som kanskje ikke forstår norsk. Til sist er de også lurt å unngå spesielle symoboler som æ, ø og å i variabelnavn; hvorfor kan du lese mer om når vi kommer til unicode og tekstkoding senere i emnet. Selv om vi anbefaler engelske variabelnavn, godtar vi også variabelnavn på norsk; men vær konsekvent.
# Nja, vær i så fall konsekvent
antall_mennesker = 42
# Bra
number_of_people = 42
  1. Bruk små bokstaver og bruk understrek (_) for å skille mellom ord, såkalt snake_case. Merk at du i noen eksterne pakker kanskje vil se andre konvensjoner, som lowerCamelCase (ansett for å være god stil i en noen andre programmeringsspråk). I INF100 holder vi oss derimot til snake_case for variabelnavn vi døper selv, slik den offisielle dokumentasjonen for Python anbefaler.
# Nja, vær i så fall konsekvent
numberOfPeople = 42
# Bra
number_of_people = 42

Noen ganger oppretter vi en variabel som får en fast verdi når programmet starter, og som deretter aldri skal endre verdi. Dette er en såkalt konstant. Det er god stil å la konstanter være skrevet i UPPER_CASE.

# Dårlig
minimum_age = 12
# Bra
MINIMUM_AGE = 12

Du kan også støte på PascalCase noen steder, for eksempel i eksterne pakker. Det er god stil å benytte denne navneformen når man skal navngi såkalte «klasser»; men dette er utenfor pensum i INF100, og du bør derfor ikke benytte denne formen når du navngir noe i dette kurset.

  1. Ikke benytt et innebygd nøkkelord eller funksjonsnavn fra Python som variabelnavn.

De mest vanlige tabbene er å bruke input, len, sum, abs, min eller max som variabelnavn. Du kan se at disse ordene er spesielle fordi VSCode fargelegger dem annerledes enn andre variabelnavn. Dette er fordi de er reservert for spesielle formål i Python, og det er derfor en dårlig idé å bruke dem til andre ting.