You are on page 1of 19

Universitatea din Bucureti Facultatea de Geografie

Master GiS

lb

Ionut Ovejanu / 2014

Module
Un modul poate fi importat de un alt program pentru a folosi functionalitatea
acestuia. (Ex: biblioteca python)
Cel mai usor mod de a construi un modul este de a crea un fisier cu
extensia .py .
Modulele permit organizarea logica a codurilor in Python.
Un modul este un obiect de Python cu atributele numite arbitrar care se pot
lega si referentia.
Un modul poate defini functii, clase, variabile si cod executabil.
Un modul poate fi importat de un alt program pentru a folosi funcionalitatea
acestuia.

Module

Modulul sys

#!/usr/bin/python3.1
# Fisier: modulx.py
import sys, warnings
if sys.version_info[0] < 3:
warnings.warn("Nu ai Python 3.0 sau mai mare",
RuntimeWarning)
else:
print('Continuam normal')
*** Contine functionalitate specifica sistemului de operare

Module

Declaratia import

#!/usr/bin/python3.1
# Fisier: exemplul.py
# Importul modului intern sys functionalitate python
import sys
print('Calea scriptului rulat este:')
for i in sys.argv:
print(i)
print('\n\nPYTHONPATH este', sys.path, '\n')
*** Variabila .argv este o list de iruri (lista argumentelor din linia de
comand)

Module

Atributul __name__ al modulului

#!/usr/bin/python3.1
# Fisier: name.py
if __name__ == '__main__':
print('Acest program ruleaz autonom')
else:
print('Acest program a fost importat din alt
modul')
*** Python are propriul atribut numit __name__ .

Module

*** Orice program Python este un modul .


Modulul meu

#!/usr/bin/python3.1
# Fisier: modul1.py
def zisalut():
print('Primul meu modulul.')
__versiune__ = '0.1'
# Sfarsitul modulului modul1.py

*** Modului trebuie salvat in acelasi director cu toate modulele de care


acesta depinde sau va depinde.

Module

Chemarea modulului meu


#!/usr/bin/python3.1
# Fisier: modul2.py
import modul1
modul1.zisalut()
print ('Versiunea', modul1.__versiune__)

Module

Alternativa folosirea declaratiei from..import:

#!/usr/bin/python3.1
# Fisier: modul3.py
from modul1 import zisalut, __versiune__
zisalut()
print('Versiunea', __versiune__)
*** Se mai poate folosi declaratia:

from modul1 import *

Module
Functia dir

# incarca lista atributelor molului sys


>> import sys
# listeaza lista de atribute din modulul sys
>> dir (sys)
# listeaza atributele pentru modulul curent
>> dir()
# creaza o noua variabila x
>> x=25
# listeaza atributele pentru modulul curent
>> dir()
# sterge un modul din lista folosind numele lui
>> del a
# listeaza atributele pentru modulul curent
>> dir ()
*** Funcia predefinit dir este utilizata pentru a lista identificatorii pe care
i definete un obiect.
*** Functia dir() lucreaz pe orice obiect.

Obiecte si clase
Lista este un exemplu de utilizare a obiectelor si claselor.
Exista o variabil (ex: j) careia i atribuim o valoare (ex: 69), rezultatul
este un obiect (de fapt instan) i din clasa (de fapt tipul) int.
[ tipuri: int(), long(), float(), and complex() ]
O clas poate avea i funcii (metode) definite pentru a fi folosite exclusiv
n raport cu acea clas (aceste funcionaliti se folosesc numai asupra
unui obiect din acea clas).
Ex: metoda append pentru clasa list care ne permite s adugm un
element la sfritul listei. Prin urmare lista_mea.append('un item') va
aduga acel ir la lista_mea (notaia punct pentru accesarea metodelor
obiectelor).
Clasa poate avea i cmpuri, adica variabile definite n raport exclusiv cu
acea clas. Pot fi folosite acele variabile/nume numai n raport un obiect
din acea clas (cmpurile sunt accesate tot prin notaia cu punct).

Tipuri numerice
int(y): y convertit la numar intreg; conversie de la un ntreg n virgul
mobil poate duce la truncherea valoarii. Utilizarea floor() or ceil() de la
modulul de matematica pentru a defini mai bine conversiile.
long(y): y convertit la numr ntreg lung, conversie de la un ntreg n
virgul mobil poate duce la o valoare trunchiata.
float(y): y transformat in virgula mobile.
complex(re,im): un numr complex cu re parte real, im parte imaginar
(im implicit la zero).
*** Un numr ntreg lung poate reprezenta un numr ntreg ntreg al carui
interval este mai mare sau egal cu cea a unui ntreg standard pe aceeai
main.
***Un numr complex este un numr care poate fi pus n forma x + yi, unde x
i y sunt numere reale i i se numeste unitatea imaginara , n cazul n care i2
= -1. (x se numete partea real i y partea imaginar a numrului complex)

Structuri de date

Structurile de date sunt structuri care pot memora date grupate


(folosite pentru a stoca colecii de date nrudite).
Exista patru structuri predefinite n Python:

- liste,
- tupluri,
- dicionare,
- seturi;

Listele - resprezinta o structur de date care pstreaz o colecie


ordonat de elemente (poate memora o secven de elemente ntr-o
list).
Elementele listei trebuie incluse n paranteze drepte astfel nct Python s
nteleag c este o specificare de list.
Odat ce am creat lista, putem aduga, terge sau cuta elemente n ea.

Liste
#!/usr/bin/python3.1
# Fisier: list1.py
# Lista mea de carti
shoplist = ['gis', 'python', 'db', 'lbs']
print('Am de cumparat', len(shoplist), 'carti.')
print('Acestea sunt:', end=' ')
for item in shoplist:
print(item, end=' ')
print('\nTrebuie sa cumpar si topografie.')
shoplist.append('topografie')
print('Lista mea de cumparaturi este acum', shoplist)
print('Acum vom sorta lista')
shoplist.sort()
print('Lista sortata este', shoplist)
print('Primul lucru de cumparat este', shoplist[0])
item_cumparat = shoplist[0]
del shoplist[0]
print('Am cumparat', item_cumparat)
print('Lista mea este acum', shoplist)

Tupluri
Tuplurile sunt folosite pentru pstra colecii de obiecte. (similare cu listele, dar fr
funcionalitatea extins pe care o dau clasele). Tuplurile sunt imuabile (nu pot fi modificate)
ca i irurile adic. Tuplurile sunt definite prin specificarea itemurilor separate prin virgule
ntr-o pereche opional de paranteze.
#!/usr/bin/python3.1
# Fisier: tuplu1.py
seminar = ('alina', 'madalina', 'florin') # parantezele sunt optionale
print('Numarul masteranzilor in sala este', len(seminar))
seminar_nou = ('ionut', 'mihaela', seminar)
print('Numarul de scaune la noul seminar este ', len(seminar_nou))
print('Masteranzii la noul seminar sunt ', seminar_nou)
print('Masteranzii veniti de la seminar anterior sunt ', seminar_nou[2])
print('Ultimul masterand venit la seminarul anterior este', seminar_nou[2]
[2])
print('Numarul de masteranzilor la noul seminar este ', len(seminar_nou)1+len(seminar_nou[2]))
*** Parantezele sunt optionale, dar pentru a evita ambiguitatea este util sale folositi.
*** Ex: print(1,2,3) si print( (1,2,3) ) - prima tipareste trei numere; a doua tipareste un tuplu (care
conine trei numere).

Dictionare
Dictionarul este ca o carte de adrese n care poi gsi adresa sau datele de contact ale
persoanei doar tiindu-i numele [adic asociem chei (nume) cu valori (detalii)]. O cheie
trebuie s fie unic, pentru a nu exista confuzii. Pentru chei putei folosi numai obiecte
imuabile (irurile), iar pentru valori putem folosi orice fel de valori(chei =obiecte simple).
#!/usr/bin/python3.1
# Fisier: dictionar.py
# 'ab' este o prescurtare de la 'a'ddress'b'ook
ab = {

'Alina'
: 'alina@yahoo.com',
'Madalina'
: 'madalina@gmail.com',
'Florin' : 'florin@geo.unibuc.ro',
'Andreea'
: 'andreea@ymail.com'

print("Adresa Alinei este", ab['Alina'])


# Stergerea unei perechi cheie - valoare
del ab['Andreea']
print('\nExist {0} contacte in address-book\n'.format(len(ab)))
for nume, adresa in ab.items():
print('Contactati pe {0} la adresa {1}'.format(nume, adresa))
# Adugarea unei perechi cheie - valoare
ab['Marin'] = 'marin@yahoo.com'
if 'Marin' in ab: # OR ab.has_key('Marin')
print("\nAdresa lui Marin este", ab['Marin'])

*** ntr-un dicionar perechile cheie - valoare nu sunt ordonate.

Secvene
Listele, tuplurile si sirurile reprezinta exemple de secvene. Secventele au teste de
apartenen (adic expresiile in i not in) i operaii de indexare. Operaia de indexare ne
permite s extragem direct un item din secven (operatia de feliere).
#!/usr/bin/python3.1
# Fisier: secvente.py
materii = ['sig', 'cartografie', 'topografie', 'teledetectie']
nume = 'geografie'
# Operaia de indexare sau 'subscriere'
print('Itemul 0 este', materii[0])
print('Itemul 1 este', materii[1])
print('Itemul 2 este', materii[2])
print('Itemul 3 este', materii[3])
print('Itemul -1 este', materii[-1])
print('Itemul -2 este', materii[-2])
print('Caracterul 0 este', nume[0])
# Felierea unei liste
print('Materiile de la 1 la 3 sunt', materii[1:3])
print('Materiile de la 2 la sfarsit sunt', materii[2:])
print('Materiile de la 1 la -1 sunt', materii[1:-1])
print('Materiile de la nceput la sfarsit sunt', materii[:])
# Felierea unui ir
print('Caracterele de
print('Caracterele de
print('Caracterele de
print('Caracterele de

la
la
la
la

1 la 3 sunt', nume[1:3])
2 la end sunt', nume[2:])
1 la -1 sunt', nume[1:-1])
inceput la sfarsit sunt ', nume[:])

Seturi
Sunt colecii neordonate de obiecte simple.
Sunt folosite atunci cand existena unui obiect n colecie este mai important dect poziia
lui sau numrul de apariii. Dac un set este subset al altui set, putei afla intersecia a
dou seturi i aa mai departe.
>>> europa = set(['romania', 'bulgaria', 'ungaria'])
>>> 'romania' in europa
>>> 'usa' in europa
>>> world = europa.copy()
>>> world.add('china')
>>> world.issuperset(europa)
>>> europa.remove('ungaria')
>>> europa and world

Referine
Numele variabilei este un indicator ctre acea parte a memoriei calculatorului n care este
stocat obiectul. Acest fapt se numete legare (binding) a numelui la obiect.
#!/usr/bin/python3.1

# Fiier: referinta.py
print('Atribuire simpla')
lista_initiala = ['gis', 'cartografie', 'topografie', 'teledetectie']
lista_mea = lista_initiala # (alt nume al aceluiasi obiect!)
del lista_initiala[0] # Am luat primul item, deci s-l stergem din list
print('lista initiala este', lista_initiala)
print('lista mea este', lista_mea)
# Observati ca ambele liste apar fr 'gis', confirmnd
# astfel ca ele indic acelasi obiect
print('Copiere facand o felie intergala')
lista_mea = lista_initiala[:] # Face o copie prin feliere integral
del lista_mea[0] # eliminam primul item
print('lista_initiala este', lista_initiala)
print('lista_mea este', lista_mea)
# Observati c acum cele dou liste sunt diferite?
*** O declaratie de atribuire pentru liste nu creeaza o copie. (se utilizeaza
felierea pentru a face o copie a secventei).

Universitatea din Bucureti Facultatea de Geografie


Master GiS

Va mulumesc

OpenGiS.ro / 2014