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
1
Föreläsning 6
Funktioner, filer, särfalloch lite om klasser
2
Anrop med parameternamn
• Funktioner kan anropas med parameternamn.
>def f(x):
return x * x
>f(x = 4)
16
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
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
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__
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()
7
Namnrum
file,x,y,f
x,g
open __builtin__ name space
module name space
f’s name space
g’s name space
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()
9
Vilket namn används?
• Vilket namn som används vid referering bestäms enligt LEGB-regeln:
1. Local2. Enclosing3. Global4. Built-in
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
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
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.
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()
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()
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()
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”]]
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()
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”]
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.
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!”
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
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.
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)
24
Använd klass
mc1 = MyClass(”Douglas”)
mc2 = MyClass(”Lars”)
mc1.printName()
MyClass.getCount()
Ger:Douglas
2