Python
Še o Pythonu
Python je visoko modularen jezik, ki mu lahko večamo funkcionalnost
tako, da svojim programom dodajamo module, ki so jih napisali
drugi programerji, lahko pa tudi mi sami. Precej takih modulov je že
dodanih v samo osnovno distribucijo Pythona. Če hočemo take module
uporabiti, jih moramo uvoziti (
import). Uvoz modula omogoči
Pythonu, da uporablja funkcije, ki so na voljo v tem modulu.
Kaj modul je?
Kratek odgovor na to je, da je modul tekstovna datoteka, ki vsebuje
enega ali več Pythonovih stavkov oziroma definicij (funkcij in
razredov). Večina modulov vsebuje tudi komentarje. Ko uvozimo
modul, se njegovi stavki, ki niso vključeni v razne definicije funkcij
in razredov, izvedejo, Ti stavki lahko celo uvozijo druge module.
Kakšne module imamo na voljo?
Če nas zanima, kateri moduli so na voljo, si moramo ogledati
priročnik o knjižnici modulov ( Library Reference).
Oglej si, kaj ta vsebuje.
"Library Reference" je pisan v angleščini, brez katere
pri
programiranju pač ne gre. Organiziran je sekcije glede na
funkcionalnost posameznih modulov. Sekcije so naslednje:
Built-in: vgrajene funkcije, ki so
vedno na voljo
Python services: funkcije,
povezane z notranjim delovanjem Pythona
String services: Funkcije za delo
z nizi (contents of string variables)
Miscellaneous: različne funkcije
Generic OS: to so servisi, ki
omogočajo pogovor s funkcijami operacijskega sistema
in tako naprej...
Primer uporabe modulov
Sedaj naj nas zanima, kako meriti čas, ki je potreben za izvedbo neke
procedure. Uporabili bomo modul time ,
ki je lociran v sekciji Generic
OS.
Želimo imeti tudi na voljo naključno generirane vrednosti, s katerimi
bi radi preiskušali naše algoritme. Uporabimo torej
še modul random
iz
sekcije Miscellaneous
services. Na že omenjenih straneh (library Reference) si lahko
ogledamo podrobnosti o teh modulih.
Preskusimo njihovo uporabo kar s Pythonovim interpreterjem in
vtipkajmo:
>>> import time >>> while 1: ... print time.clock() ...
|
Števila, ki jih vrača time.clock(),
predstavljajo, koliko časa (merjeno v sekundah) teče naš
program.
(Program teče v neskončni zanki, prekinemo ga s Ctrl-C) Torej
lahko to funkcijo uporabljamo za to, da ugotovimo, koliko časa
potrebuje program za izvedbo nekega dela. Poskusimo sedaj naslednje
>>> import whrandom >>> while 1: ... print whrandom.random() ...
|
Uporabili smo funkcijo, ki naključno generira števila. Včasih
nam to
prav pride za tvorbo naključnih podatkov.
Opazimo še stavek import,
ki prebere funkcije iz ustrezne datoteke, ki vsebuje stavke v Pythonur.
Če na primer vtipkamo
bo Python prebral datoteko z imenom "time.py" in dal na voljo vse
funkcije in imena podatkov iz te datoteke. Tako dobimo na voljo
funkcije time.altzone,
time.asctime(), time.clock() itd.
Včasih želimo neko funkcijo zelo pogosto uporabljati in bi si želeli
pisati le njeno ime, brez dolgočasnega navajanja modula, kateremu
pripada. To dosežemo z malo spremenjenim stavkom za uvoz:
>>> from time import clock >>> while 1: ... print clock() ...
|
Tako smo iz modula time
uvozili le funckijo clock,
vendar ji pravimo sedaj le "clock" namesto "time.clock". Tak
pristop je včasih pripraven, vendar moramo v tem primeru bolj paziti na
imena, da ne bo zmešnjave. Če bi namreč zatem kaj drugega
definirali
kot clock,bi to nadomestilo (povozilo) definicijo, ki
smo jo prej naredili s from time import clock. Boljši način
za
olajšanje življenja je tak, da funkcijo dodelimo neki
spremenljivki, na primer:
>>> import time >>> c = time.clock >>> while 1: ... print c() ...
|
Tako smo tvorili
spremenljivko z imenom "c" in ji dodelili vrednost funkcije
"time.clock". Da, da, izgleda nenavadno, vendar Python obravnava
funkcije enako kot podatke in jih lahko hranimo v spremenljivke ter jih
kličemo z imeni spremenljivk.
Na prejšnji strani je bilo podanih več algoritmov sortiranja.
Podani
program naj bi omogočal primerjavo njihove hitrosti: V rdeči barvi so
stavki ali elementi stavkov, ki omogočajo uvoz in uporabo
funkcij za naključno tvorbo podatkov ( s funkcijo randint) in
merjenje časa (s funkcijo clock).
from whrandom import randint # the standard random number module from time import clock # for timing different algorithms
def bubble_sort(list): l=list[:] # create a slice-copy of the list for i in range(len(l)): # for every element [i] in the list for j in range(i+1,len(l)): # examine every element [j] after it if l[i]>l[j]: # and if they are "out of order" l[i],l[j]=l[j],l[i] # swap them return l
def selection_sort(list): l=list[:] # create a copy of the list sorted=[] # this new list will hold the results while len(l): # while there are elements to sort... lowest=l[0] # create a variable to identify lowest for x in l: # and check every item in the list... if x<lowest: # to see if it might be lower. lowest=x sorted.append(lowest) # add the lowest one to the new list l.remove(lowest) # and delete it from the old one return sorted
def trial(func,list): # time how long it takes start = clock() # get starting time... list1 = func(list) # try the function... end = clock() # get the ending time... print " ", end - start, # and print the total time it took print " size bubble selection" for size in range(50,1001,50): # we go from 50 to 1000 items to test list=[] for i in range(size): list.append(randint(0,size)) # and we fill the list with random #'s print " ", size, trial(bubble_sort,list) # then we try each sort() on the list trial(selection_sort,list) print
|
Domača
naloga
Program
izboljšaj
tako, da polepšaš izpis, ki naj bo
poravnan. Oglej si priročnik Library Reference. V
modulu String
preštudiraj funkcije
ljust, rjust in center.
To so sicer funkcije za delo z nizi, mi pa moramo izpisovati
števila
(čase izvajanja). Števila bo zato potrebno pretvoriti v niz.
Uporabimo
lahko vgrajeno (built in) funkcijo str,
ki jo prav tako najdemo v priročniku.