Variable og funksjoner
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