lb3

19
Universitatea din București – Facultatea de Geografie Master GiS Ionut Ovejanu / 2014 lb3

description

dfd

Transcript of lb3

  • Universitatea din Bucureti Facultatea de GeografieMaster GiS

    Ionut Ovejanu / 2014

    lb3

  • 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, warningsif 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.

    Module

  • 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).

    Obiecte si clase

  • 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)

    Tipuri numerice

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

    Structuri de date

  • #!/usr/bin/python3.1# Fisier: list1.py # Lista mea de cartishoplist = ['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)

    Liste

  • 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 optionaleprint('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).

    Tupluri

  • 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' : '[email protected]', 'Madalina' : '[email protected]', 'Florin' : '[email protected]', 'Andreea' : '[email protected]' } print("Adresa Alinei este", ab['Alina'])# Stergerea unei perechi cheie - valoaredel 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 - valoareab['Marin'] = '[email protected]'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.

    Dictionare

  • 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 listeprint('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 irprint('Caracterele de la 1 la 3 sunt', nume[1:3])print('Caracterele de la 2 la end sunt', nume[2:])print('Caracterele de la 1 la -1 sunt', nume[1:-1])print('Caracterele de la inceput la sfarsit sunt ', nume[:])

    Secvene

  • 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

    Seturi

  • 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 integraldel 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).

    Referine

  • Universitatea din Bucureti Facultatea de GeografieMaster GiS

    Va mulumesc

    OpenGiS.ro / 2014

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19