Python
Python
Børre Stenseth

Variable og funksjoner

Hva

På samme måte som JavaScript har Python ikke eksplisitte datatyper

Vi kan definere fumksjoner med parametre og vi kan returnere verdier og datastrukturer

Siden vi ikke har noen typeangivelser kan vi skrive

a="nilsen"
a=12
print(a)

og få skrevet ut 12

Dersom vi skriver

a=12
b="nilsen"
print(a+b)

får vi følgende feil

Traceback (most recent call last):
  File "C:/webnew/wep/python/variable/case2.py", line 3, in <module>
    print(a+b)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Dersom vi skriver

a=12
b="nilsen"
print(b+a)

får vi følgende feil

Traceback (most recent call last):
  File "C:/webnew/wep/python/variable/case3.py", line 3, in <module>
    print(b+a)
TypeError: Can't convert 'int' object to str implicitly

Dersom vi skriver

a=12
b="nilsen"
print(b+str(a))

får vi følgende: nilsen12

Funksjoner

Vi definerer funksjoner med nøkkelordet def. Merk at vi har ingen parenteser for å angi blokker eller kroppen til funksjonen. Alt er styrt av indentering. F.eks. slik:

# definisjon av en funksjon
def findMax(a,b):
    if a > b:
        return a
    return b
# calls the function and prints result
biggest=findMax(4,12)
print(biggest)

og får ikke overraskende skrevet ut 12

Scope

Variable er kjente i den blokken vi definerer dem. En variable definert inne i en modul er bare kjent i denne modulen og skal vi når den utenfra må vi bruke .notasjon (slik som vi gjør når vi skal få tak i noe inne i en klasse).

# En modul for sirkelberegninger, mods
# definisjon av en variable
doublePi=6.28
# definisjon av en funksjon
def finnOmkrets(radius):
    return radius*doublePi

Dersom vi skal bruke denne modulen:

# importer modulen vi vil bruke
import mods
# bruk funksjonen i mods
print(mods.finnOmkrets(10))
# kan også hente variable
print(mods.doublePi)

Inne i en funksjon kan vi uten videre referere verdier som er er definert utenfor funksjonen, som ekesempelet ovenfor viser. Dersom vi ønsker å endre verdier som er definert tenfor funksjonen, må vi si fra at vi arbeider med en global variabel.

# vil akkumulere resultater i denne variabelen
sum=0;
def addCalculation(a,b):
    global sum
    sum=a*b
# calls the function
addCalculation(3,3)
print (sum)

Gir oss 9.

Dersom vi fjerner linja global sum ville vi få 0, fordi sum da oppfattes som en lokal variable i funksjonen

Vi kan gjøre slik, og få 24:

# vil akkumulere resultater i denne variabelen
sum=0;
def addCalculation(a,b):
    global sum
    sum=sum+a*b
# calls the function
addCalculation(3,3)
addCalculation(3,5)
print (sum)

Dersom vi fjerner linja global sum her vil vi få en feil:

UnboundLocalError: local variable 'sum' referenced before assignment