1 / 24

Föreläsning 6

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

kendis
Download Presentation

Föreläsning 6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Föreläsning 6 Funktioner, filer, särfall och 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 vars x = 1 y = 2 def f(): # f is global func. x = 3 # x is local to f. It # shadows global x print y # y is global def g(): # g is local to f print x # x is enclosing g() # to g f()

  7. Namnrum __builtin__ name space open module name space file,x,y,f f’s name space x,g 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: • Local • Enclosing • Global • 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äng file.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 cPickle myfile = 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 klass class MyClass(object): count = 0 # Class var def __init__(self, name): # Constructor self.name = name MyClass.count += 1 def printName(self): # Inst. method print self.name def getCount(): # Class method return MyClass.count getCount = staticmethod(getCount)

  24. Använd klass mc1 = MyClass(”Douglas”) mc2 = MyClass(”Lars”) mc1.printName() MyClass.getCount() Ger: Douglas 2

More Related