1 / 33

Python

Python. Kratek učbenik. I ntera ktivna “ lupina " Osnovni tipi : števila , nizi Vsebovalniki : seznami , slovarji , tuples Spremenljivke Krmilne strukture F un kcije in procedure Razredi in primerki (instance) Moduli in paketi Izjeme Datoteke in standardna knjižnica.

judd
Download Presentation

Python

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. Python

  2. Kratek učbenik • Interaktivna “lupina" • Osnovni tipi: števila, nizi • Vsebovalniki: seznami, slovarji, tuples • Spremenljivke • Krmilne strukture • Funkcije in procedure • Razredi in primerki (instance) • Moduli in paketi • Izjeme • Datoteke in standardna knjižnica

  3. Interaktivna “lupina” • Lahkotno učenje jezika • Lahkotno preskušanje knjižnic • Lahkotno preskušanje lastnih modulov • Stavke tipkamo kot odgovor na “prompt”: >>> print “Pozdrav vsem" Pozdrav vsem >>> x = 12**2 >>> x/2 72 >>> # to je komentar

  4. Števila • Običajne stvari • 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5 • Pomikanje in maskiranje v stilu C • 1<<16, x&0xff, x|1, ~x, x^y • Celoštevilčno deljenje • 1/2 -> 0 # 1./2. -> 0.5, float(1)/2 -> 0.5 • Dolga cela števila, kompleksna števila • 2L**100 -> 1267650600228229401496703205376L • 1j**2 -> (-1+0j)

  5. Nizi • "hello"+"world" "helloworld"# konkatenacija • "hello"*3 "hellohellohello"# ponavljanje • "hello"[0] "h"# indeksiranje • "hello"[-1] "o"# (od konca) • "hello"[1:4] "ell"# del • len("hello") 5# velikost • "hello" < "jello" 1# primerjanje • "e" in "hello" 1# iskanje • "escapes: \n etc, \033 etc, \if etc" • 'single quotes' """triple quotes""" r"raw strings"

  6. Seznami • Fleksibilna polja, • a = [99, "bottles of beer", ["on", "the", "wall"]] • Isti operatorji kot za nize • a+b, a*3, a[0], a[-1], a[1:], len(a) • Prirejanje enot in delov enot • a[0] = 98 • a[1:2] = ["bottles", "of", "beer"] -> [98, "bottles", "of", "beer", ["on", "the", "wall"]] • del a[-1] # -> [98, "bottles", "of", "beer"]

  7. Še več operacij s seznami >>> a = range(5) # [0,1,2,3,4] >>> a.append(5) # [0,1,2,3,4,5] >>> a.pop() # [0,1,2,3,4] 5 >>> a.insert(0, 42) # [42,0,1,2,3,4] >>> a.pop(0) # [0,1,2,3,4] 5.5 >>> a.reverse() # [4,3,2,1,0] >>> a.sort() # [0,1,2,3,4]

  8. Slovarji • Hash tabele, "asociativna polja" d = {"duck": "eend", "water": "water"} • Lookup: d["duck"] -> "eend" d["back"] # sprozi KeyError exception • Delete, insert, overwrite: del d["water"] # {"duck": "eend", "back": "rug"} d["back"] = "rug" # {"duck": "eend", "back": "rug"} d["duck"] = "duik" # {"duck": "duik", "back": "rug"}

  9. Še več operacij s slovarji • Ključi, vrednosti, elementi: d.keys() -> ["duck", "back"] d.values() -> ["duik", "rug"] d.items() -> [("duck","duik"), ("back","rug")] • Preverjanje prisotnosti: d.has_key("duck") -> 1; d.has_key("spam") -> 0 • Values of any type; keys almost any {"name":"Guido", "age":43, ("hello","world"):1, 42:"yes", "flag": ["red","white","blue"]}

  10. Podrobnosti o seznamih • Ključev ne smemo spreminjati: • števila, nizi, tuples konstant • Po tvorbi jih ne smemo več spreminjati • Razlog jehashing (tehnika hitrega iskanja) • neseznami ali drugi slovarji • Te tipe objektov lahko spreminjamo “na mestu" • Ni omejitev pri vrednostih • Ključe lahko navajamo v poljubnem zaporedju • Spet zaradi hashing

  11. Tuples ključ = (priimek, ime) tocka = x, y, z # lahko tudi z oklepaji x, y, z = tocka# razpakiranje lastname = key[0] singleton = (1,) # vejica na koncu!!! empty = () # oklepaji! V primerjavi tuples sseznami tuples niso spremenljivi

  12. Spremenljivke • Ni potrebna deklaracija • Potreba po prirejanju (inicializacija) • Uporaba neinicializiranih spremenljivk povzroči izjemo • Ni tipov ifprijateljsko: pozdrav = “Dober dan" else: pozdrav = 12**2 printpozdrav • Vse so “spremenljivke": • Tudi funkcije, razredi, moduli

  13. Pomen referenc • Prirejanje dela z referencami • x = y #ne naredi kopije y • x = y # x naslavljaobjekt, ki ga naslavlja y • Zelo uporabno; toda previdnost! • Primer: >>> a = [1, 2, 3] >>> b = a >>> a.append(4) >>> print b [1, 2, 3, 4]

  14. a 1 2 3 1 2 3 a b Spreminjanje souporabljenega seznama a = [1, 2, 3] b = a a 1 2 3 a.append(4) 4 b

  15. 1 a Spreminjanje celoštevilčnega podatka a = 1 a 1 b = a b new int object created by add operator (1+1) 2 a a = a+1 old reference deleted by assignment (a=...) 1 b

  16. ifpogoj: stavki [elifpogoj: stavki] ... else: stavki whilepogoj: stavki forvarinzaporedje: stavki break continue Krmilne strukture

  17. V jeziku Python: for i in range(20): if i%3 == 0: print i if i%5 == 0: print “Zadetek!" print "---" V jeziku C: for (i = 0; i < 20; i++) { if (i%3 == 0) { printf("%d\n", i); if (i%5 == 0) { printf(“Zadetek!\n"); } } printf("---\n"); } Zamik skupin 0 Zadetek! --- --- --- 3 --- --- --- 6 --- --- --- 9 --- --- --- 12 --- --- --- 15 Zadetek! --- --- --- 18 --- ---

  18. Funkcije, Procedure def ime(arg1, arg2, ...): """dokumentacija""" # opcijski opis stavki return# iz procedure returnizraz# iz funkcije

  19. Primer funkcije def gcd(a, b): "greatest common divisor" while a != 0: a, b = b%a, a # paralelno prirejanje return b >>> gcd.__doc__ 'greatest common divisor' >>> gcd(12, 20) 4

  20. Razredi classime: "dokumentacija" stavki -ali- classime(osnova1, osnova2, ...): ... Stavki so večinoma definicije metod: def ime(self, arg1, arg2, ...): ... Lahko pa so tudi prireditve rezrednih spremenljivk

  21. Primer razreda classSklad: “zelo znana podatkovna struktura…" def __init__(self): # konstructor self.items = [] def push(self, x): self.items.append(x) # ni omejitve def pop(self): x = self.items[-1] # kaj se zgodi, ce je prazen? del self.items[-1] return x def empty(self): return len(self.items) == 0 # Boolov rezultat

  22. Uporaba razredov • Primerek tvorimo preprosto s klicem konstruktorja: x = Sklad() # Ni operatorja 'new'! • Klicanje metod primerka z uporabo notacije s piko: x.empty() # -> 1 x.push(1) # [1] x.empty() # -> 0 x.push("hello") # [1, "hello"] x.pop() # -> "hello" # [1] • Uporaba spremenljivk primerka s pomočjo notacije s piko: x.items # -> [1]

  23. Dedovanje class PosebenSklad (Sklad): “sklad z dodano možnostjo vpoglrda v spodnje elemente" def peek(self, n): "peek(0) vrne zgornji element; peek(-1) vrne element pod njim itd." velikost = len(self.items) assert 0 <= n < velikost# test predpogoj return self.items[velikost1-n]

  24. Dedovanje (2) class OmejenSklad(PosebenSklad): “PosebenSklad z omejitvijo velikosti sklada" def __init__(self, limit): self.limit = limit PosebenSklad.__init__(self)# Konstruktor dedovanega razreda def push(self, x): assert len(self.items) < self.limit PosebenSklad.push(self, x) # klic metode dedovanega razreda

  25. Spremenljivke primerkov in razredov class Connection: verbose = 0 # spremenljivka razreda def __init__(self, host): self.host = host # spremenljivka primerka def debug(self, v): self.verbose = v # tvorba spremenljivke primerka! def connect(self): if self.verbose: # spremenljivka razreda ali primerka? print "connecting to", self.host

  26. Pravila za spremenljivke primerka • Pri uporabi primerka (self.x) je vrstni red iskanja: • (1) primerek, (2) razred, (3) dedovani razredi • Tako je tudi pri iskanju metod • Pri prirejanju preko primerka (self.x = ...): • Vedno tvorimo spremenljivko primerka • Razredne spremenljivke lahko uporabljamo v primerkih • Toda...! • Razredna spremenljivka: ena kopija, ki jo uporabljajo vsi • Spremenljivka primerka: vsak primerek ima svojo

  27. Moduli • Zbirka stvari v datoteki blabla.py file • funkcije, razredi, spremenljivke • Uvoz modulov: • import re; print re.match("[a-z]+", s) • from re import match; print match("[a-z]+", s) • Uvoz s preimenovanjem: • import re as regex • from re import match as m

  28. Paketi • Zbirka modulov v direktoriju • Imeti moramo datoteko __init__.py • Lahko imamo podpakete • Sintaksa za uvoz: • from P.Q.M import foo; print foo() • from P.Q import M; print M.foo() • import P.Q.M; print P.Q.M.foo() • import P.Q.M as M; print M.foo() # new

  29. Lovljenje izjem def deljenje(x): return 1/x def bar(x): try: print deljenje(x) except ZeroDivisionError, message: print “Ne morem deliti z 0:", message bar(0)

  30. Try-finally: Čiščenje f = open(file) try: process_file(f) finally: f.close() # se vedno izvede print "OK" # se izvede le ob uspehu

  31. Proženje izjem • raise IndexError • raise IndexError("k out of range") • raise IndexError, "k out of range" • try:nekaj narediexcept: # lovimo karkoli print "Oops"raise# reraise

  32. Objekti File • f = open(filename[, mode[, buffersize]) • mode je lahko "r", "w", "a" (kot pri C); privzeto "r" • append "b" za text translation mode • append "+" za read/write open • buffersize: 0=unbuffered; 1=line-buffered; buffered • metode: • read([nbytes]), readline(), readlines() • write(string), writelines(list) • seek(pos[, how]), tell() • flush(), close() • fileno()

  33. Standardna knjižnica • Jedro: • os, sys, string, getopt, StringIO, struct, pickle, ... • Regularni izrazi: • re module; pravila ujemanja v stilu Perl-5 • Internet: • socket, rfc822, httplib, htmllib, ftplib, smtplib, ... • Razno: • pdb (debugger), profile+pstats • Tkinter (Tcl/Tk vmesnik), audio, *dbm, ...

More Related