Lokale og globale variabler

La oss si at vi har en funksjon, kvadrer(), som kvadrerer verdien til parameteren x:

def kvadrer(x):
    x = x**2

I hovedprogrammet oppretter vi så en variabel, x, med verdien 4, kaller opp funksjonen med x som argument, og skriver ut verdien til x etterpå:

x = 4
kvadrer(x)
print(x)

Vi får da skrevet ut 4, ikke den kvadrerte verdien til 4, som er 16. Verdien til x har altså ikke endret seg, selv om x ble kvadrert i funksjonen kvadrer(). Grunnen er at variabelen x inni funksjonen ikke er den samme som variabelen x i hovedprogrammet, den har bare samme navn. Variable opprettet inni en funksjon eksisterer ikke utenfor funksjonen, de er lokale variabler i funksjonen.

Nå modifiserer vi funksjonen kvadrer() litt, slik at den returnerer den kvadrerte verdien til x, endringen markert med gult:

def kvadrer(x):
    x = x**2
    return x

Igjen oppretter vi en variabel, x = 4, i hovedprogrammet, kaller opp funksjonen med x som argument, og skriver ut verdien til x etterpå:

x = 4
kvadrer(x)
print(x)

Fremdeles får vi skrevet ut 4, x er altså ikke blitt kvadrert.

Grunnen er at vi ikke har koplet funksjonens returverdi til variabelen x i hovedprogrammet. Det har vi gjort i koden under, markert med gult:

x = 4
x = kvadrer(x)
print(x)

Og nå får vi skrevet ut 16.

Vi må altså gjøre en eksplisitt overføring av verdier inn og ut av en funksjon gjennom parametere og returverdier, det er ikke nok å ha en variabel med samme navn i funksjonen og i hovedprogrammet.

Oppgave 1:

Vi har funksjonen kvadrer(), som vist under:

def kvadrer(y):
    """Kvadrerer y."""
    z = y**2
    return z

I hovedprogrammet skriver vi

y = 5
z = 6
y = kvadrer(z)
print(f"y = {y}, z = {z}")

Hva vil da bli skrevet ut? Tenk grundig gjennom problemstillingen først, og prøv så ut i Python etterpå.

Se løsningsforslag

Globale variabler

Variabler som er opprettet i hovedprogrammet kalles globale variabler. Globale variabler er tilgjengelige inni funksjoner i Python, men lokale variabler med samme navn vil erstatte dem. Lokale variabler er imidlertid ikke globale, som vi har sett.

Det kan finnes situasjoner der en ønsker bruke lokale variabler globalt, og det er derfor mulig å gjøre dem globale ved hjelp av kodeordet global. Som hovedregel er dette imidlertid noe vi unngår fordi vi ikke ønsker at en funksjon skal påvirke noe utenfor seg selv, men være en lukket enhet. At en funksjon påvirker noe utenfor seg selv, kaller vi en sideeffekt.

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press