Uvod u jezik PYTHON

(priručnik za  predmet "Skript jezici")


© Matematički fakultet

Miljana Mladenović, Duško Vitas

O Python-u
Instalacija
Sintaksa jezika Python
Osnovne osobine
Službene reči
Operatori i njihovi prioriteti
Osnovne algoritamske strukture
Blok naredbi
if struktura
while struktura
Iskazi: break, continue, pass
Tipovi podataka u Python-u
Osnovni i ugradjeni tipovi
Brojevi
Konverzija formata
Neke matematičke funkcije
Neke random funkcije
Niske
Neke funkcije nad niskama
Formatiranje niski
Liste
Torke
Osnovni izrazi sa torkama
Rečnici
Skupovi
Operacije nad skupovima
Datoteke
Funkcije modula os za rad sa datotekama
Funkcije modula os za rad sa folderima
Izuzeci
Funkcije
Moduli
Paketi
Klase
Regularni izrazi
Baze podataka
Primeri u Netbeans-u

Moduli :

   

U Python-u, moduli su efikasan način za višestruku upotrebu i deljenje programskog koda. Modul je fajl sa ekstenzijom .py čiji je sadržaj niz komandi Python jezika organizovanih i u vidu funkcija i klasa. Postoji veliki broj biblioteka modula koji dolaze sa  Python instalacijom i predstavljaju tzv. built-in grupu modula koji omogućavaju korisniku njihovu upotrebu u izradi specifičnih aplikacija i  kreiranju sopstvenih modula.

Pre upotrebe nekog modula u korisničkom programu, neophodno ga je importovati. To se može učiniti na nekoliko načina. Najjednostavnije je importovati ceo modul, pre njegove upotrebe.

   

import naziv_modula

   

Može se importovati i samo jedan ili nekoliko delova datog modula.

   

from naziv_modula import naziv_dela_modula

   

Moguće je upotrebiti i from naziv _modula import *      , čime se postiže učitavanje celog modula, ali se ne preporučuje kod multiplatformskih aplikacija.

Ako je posle importa došlo do promene sadržaja modula, on se može ponovo učitati pozivom metoda reload.

   

Pri učitavanju modula, Python interpreter pronalazi naziv _modula pretražujući sledećim redosledom:

·  najpre tekući (radni) folder

·  listu foldera navedenih u promenljivoj PYTHONPATH (environment variable)

(Uobičajena vrednost u Windows sistemima je PYTHONPATH=c:\python20\lib;

a u UNIX sistemima PYTHONPATH=/usr/local/lib/python ).

· instalacioni folder (npr. e:\Python26).

Ukoliko se ne nađe ni u jednom od traženih foldera ili unutar njihovih podfoldera, interpreter prikazuje grešku učitavanja:

   

>>> import naziv _modula

Traceback (most recent call last):

  File “ < stdin >  ”, line 1, in   < module >

    import naziv _modula

ImportError: No module named naziv _modula

   

   

Redosled  pretraživanja modula može se dobiti ako se pročita vrednost promenljive  sys.path u modulu  sys. 

>>> import sys

>>> print sys.path

>>> import naziv _modula

['E:\\Python26\\primeri\\Primer21\\src',

'E:\\Program Files\\NetBeans 6.9\\python', 'E:\\WINDOWS\\system32\\python26.zip', 'E:\\Python26\\DLLs', 'E:\\Python26\\lib', 'E:\\Python26\\lib\\plat-win', 'E:\\Python26\\lib\\lib-tk', 'E:\\Python26', 'E:\\Python26\\lib\\site-packages', 'E:\\Python26\\primeri\\Primer21\\src']

   

Primer upotrebe modula Primer20, listanja svih njegovih funkcija i upotrebe njegove funkcije pozdrav:

#modul primer21

import sys                     #učitava sys modul

print "sys.path:", sys.path    #vraca search-path za module

print "lista funkcija modula sys",dir (sys)   #vraca listu

                                        #funkcija u sys modulu

   

import primer20             #učitava modul primer20.py

print "lista funkcija modula primer20", dir(primer20)     

primer20.pozdrav("Miljana") #izvršava funkciju pozdrav iz #modula primer20

   

sys.path: ['E:\\Python26\\primeri\\Primer21\\src', 'E:\\Program Files\\NetBeans 6.9\\python', 'E:\\WINDOWS\\system32\\python26.zip', 'E:\\Python26\\DLLs', 'E:\\Python26\\lib', 'E:\\Python26\\lib\\plat-win', 'E:\\Python26\\lib\\lib-tk', 'E:\\Python26', 'E:\\Python26\\lib\\site-packages', 'E:\\Python26\\primeri\\Primer21\\src']

lista funkcija modula sys ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'getwindowsversion', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'py3kwarning', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions', 'winver']

lista funkcija modula primer20 ['__author__', '__builtins__', '__date__', '__doc__', '__file__', '__name__', '__package__', 'dodajUlistu', 'pozdrav', 'printinfo', 'promeniListu', 'sumaF']

Zdravo, Miljana!

   

Modul Pickle obezbeđuje algoritme kojima se vrši serijalizacija i deserijalizacija Python objekata.  Pickling” (serijalizacija ili “serialization” ili  marshalling” ili “flattening”)  je postupak kojim se vrši konverzija  Python objekata složene strukture u bajt-strim. Postoji i obrnuti postupak unpickling.

Osim modula Pickle može se koristiti i cPickle, njegova varijanta pisana u C-u. Takođe, u upotrebi je i modul marshal koji se koristi pri jednostavnijim serijalizacijama i obezbeđuje čitanje iz i upis vrednosti u binarni format specifičan za Python, ali nezavisan platformski.

Za razliku od marshal algoritama, Pickle modul vodi računa o već serijalizovanim objektima, pa ih kod ponovne upotrebe ne obrađuje ponovo, već samo izvrši referenciranje. Takođe, Pickle modul može da serijalizuje korisnički definisane klase i njihove instance. Najzad, Pickle format serijalizacije ima verzionu kompatabilnost unatrag, za razliku od  marshal formata koji to ne obezbeđuje.

Ipak, za sada, oba formata ne obezbeđuju mehanizme zaštite od ugradnje malicioznog koda.

Pickling:             

pickle.dump(<objekat_serijalizacije>,<fajl>)

   

Unpickling:       

<objekat_serijalizacije>=pickle.load(<fajl>)

 

 

Beograd, novembar 2010.