24
1 Föreläsning 6 Funktioner, filer, särfall och lite om klasser

Föreläsning 6

  • Upload
    kendis

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

Föreläsning 6. Funktioner, filer, särfall och lite om klasser. Anrop med parameternamn. Funktioner kan anropas med parameternamn. >def f(x): return x * x >f(x = 4) 16. Default-parametrar. Ibland har en parameter ett naturligt default-värde. >def f(x = 3): return x * x - PowerPoint PPT Presentation

Citation preview

Page 1: Föreläsning 6

1

Föreläsning 6

Funktioner, filer, särfalloch lite om klasser

Page 2: Föreläsning 6

2

Anrop med parameternamn

• Funktioner kan anropas med parameternamn.

>def f(x):

return x * x

>f(x = 4)

16

Page 3: Föreläsning 6

3

Default-parametrar

• Ibland har en parameter ett naturligt default-värde. >def f(x = 3):

return x * x

>f(4)

16

>f(x = 6)

36

>f()

9

Page 4: Föreläsning 6

4

Default-parametrar

• Man kan ha varierande antal default-parametrar, men bara på slutet.

>def f(x = 3, y): return x * x

??? error ???>def f(x, y = 3):

return x * y>f(4)12>f(x = 9, y = 7)63

Page 5: Föreläsning 6

5

Namnrum

• Varje variabel, funktion eller klass som definieras tillhör ett namnrum.

• Detta är praktiskt för att undvika namnkollisioner.

• Varje modul har sitt eget globala namnrum.• Varje funktion har sitt namnrum. Nästlade

funktioner ger upphov till nästlade namnrum.

• Inbyggda variabler, funktioner, och klasser finns i __builtin__

Page 6: Föreläsning 6

6

Namnrum

file = open(”a.txt”)# Global module varsx = 1y = 2def f(): # f is global func.

x = 3 # x is local to f. It

# shadows global xprint y # y is globaldef g(): # g is local to f

print x # x is enclosingg() # to g

f()

Page 7: Föreläsning 6

7

Namnrum

file,x,y,f

x,g

open __builtin__ name space

module name space

f’s name space

g’s name space

Page 8: Föreläsning 6

8

Tilldelning skapar namn!

• Vid tilldelning till variabelnamn som inte hittas i lokalt namnrum skapas en ny variabel i aktuellt lokalt namnrum oavsett om variabeln kan refereras.

x = 1

def f():

x = 3 # Creates new var!

f()

Page 9: Föreläsning 6

9

Vilket namn används?

• Vilket namn som används vid referering bestäms enligt LEGB-regeln:

1. Local2. Enclosing3. Global4. Built-in

Page 10: Föreläsning 6

10

global

• Python har olyckligtvis beskaffats med nyckelordet global. Unvik det!

x = 3

def f():

global x

x = 4 # Changes value of x

f()

print x

Page 11: Föreläsning 6

11

Dokumentera

• Python låter oss knyta dokumentation till moduler, funktioner och klasser som senare kan kommas åt med __doc__.

”””My module doc””” # Start module

def f():

”””My f doc””” # Start func

class A:

”””My A doc””” # Start class

Page 12: Föreläsning 6

12

Öppna fil

En fil kan öppnas på flera vis:• För läsning:

file = open(”filename.txt”, ”r”)• För skrivning (skriver över befintlig fil)

file = open(”filename.txt”, ”w”)• För tillägg till slutet av filen:

file = open(”filename.txt”, ”a”)• Ytterligare alternativ ”r+”, ”w+”, ”a+”

fungerar som utan plus fast man kan både skriva och läsa.

Page 13: Föreläsning 6

13

Läs från öppen fil

• Hela filen:contents = file.read()

• Bestämt antal tecken:fiveChars = file.read(5)

• En rad:oneLine = file.readline()

• Alla rader till en lista:allLines = file.readlines()

Page 14: Föreläsning 6

14

Skriv till öppen fil och stäng

• Skriv strängfile.write(”Hejsan hoppsan”)

• Elementen i en lista:file.writelines()

• När du läst eller skrivit klart från/till en fil så stänger du den:file.close()

Page 15: Föreläsning 6

15

Pickling (skriv)

• Skriv komplicerade objekt till fil:

import cPickle

myfile = open(”myfile.txt”, ”w”)

l = [(1,2),”hejsan”,[”a”,”b”]]

cPickle.dump(l, myfile)

myfile.close()

Page 16: Föreläsning 6

16

Pickling (läs)

• Läs komplicerade objekt från fil:

import cPicklemyfile = open(”myfile.txt”, ”r”)l = cPickle.load(myfile)myfile.close()print l

ger:[(1,2),”hejsan”,[”a”,”b”]]

Page 17: Föreläsning 6

17

Shelve-ing (skriv)

• ”Random access” skriv till fil:

import shelve

dic = shelve.open(”myf.txt”, ”w”)

dic[”myobj”] = [(1,2),”hejsan”]

dic.sync()

dic.close()

Page 18: Föreläsning 6

18

Shelve-ing (läs)

• ”Random access” läs från fil:

import shelve

dic = shelve.open(”myf.txt”, ”r”)

print dic[”myobj”]

dic.close()

Ger:[(1,2),”hejsan”]

Page 19: Föreläsning 6

19

Särfall

• När något oväntat händer i ett program kan detta hanteras med särfall (eng. exception).

• Särfall påverkar den normalt exekverade koden minimalt och ökar läsbarheten.

• Särfall förenklar strukturerad felhantering.

Page 20: Föreläsning 6

20

Fånga särfall

• Det finns flera sorters särfall (se boken) och nya kan skapas (senare i kursen). Särfall fångas med try och except

try:

n = int(raw_input(”Enter int: ”))

except:

print ”Input not an int!”

Page 21: Föreläsning 6

21

Fånga särfall

• Särfall kan hanteras olika beroende på sort:

try:

n = int(raw_input(”Enter int: ”))

print 1/n

except(ValueError), e

print ”Input not an int: ” + e

except(ZeroDivisionError), e

print ”Zero is not allowed: ” + e

Page 22: Föreläsning 6

22

Klass

• Används för att dela upp ett program i lätthanterliga och återanvändbara delar.

• En klass fångar ett koncept.

• Klasser förenklar återanvändning av kod genom arv.

• Klasser förenklar inkapsling och abstraktion.

• En klass kan ha flera instanser med olika data.

Page 23: Föreläsning 6

23

Skapa klassclass MyClass(object):

count = 0 # Class vardef __init__(self, name):# Constructor

self.name = nameMyClass.count += 1

def printName(self): # Inst. methodprint self.name

def getCount(): # Class methodreturn MyClass.count

getCount = staticmethod(getCount)

Page 24: Föreläsning 6

24

Använd klass

mc1 = MyClass(”Douglas”)

mc2 = MyClass(”Lars”)

mc1.printName()

MyClass.getCount()

Ger:Douglas

2