You are on page 1of 23

Universitatea din Bucureti Facultatea de Geografie

Master GiS

lb

Ionut Ovejanu / 2014

Binar / Zecimal
20=1
21=2
22=4
23=8
24=16
25=32
26=64
27=128

Binar / Zecimal
2 8=256
2 9=512
210=1024
211=2048
212=4096
213=8192
214=16348
215=32768

Reprezentarea numerelor in binar:


1011=(1*23)+(0*22)+(1*21)+(1*20)
= (1*8) + (0*4) + (1*2) + (1*1)
= 11 (sistem zecimal)
Conversie din binar in zecimal:
11110 = (1*24) + (1*23) + (1*22) + (1*21) + (0*20)
=
16 +
8
+ 4
+
2
+
=30 (sistem zecimal)

Operatii in binar:
Adunarea:
0+0=0
0+1=1
1+0=1
1 + 1 = 0, retine 1 bit pentru operatia cu urmatoare
Scaderea:
0-0=0
0 - 1 = 1, imprumuta 1 bit pentru operatia cu urmatoare
1-0=1
1-1=0
Inmultirea:
0x0=0
0x1=0
1x0=0
1 x 1 = 1, nu retine si nu imprumuta biti
Impartirea in binar:
- procese succesive de scadere

OpenGiS.unibuc.ro / 2012

Translatii:
<< Translaie la stnga 2<<2 =8
10 --> 10 00 --> (1*23)+(0*22)+(0*21)+(0*20) = 8+0+0+0 =8
>> Translaie la dreapta 11>>1=5
11=8+2+1 = (1*23)+(0*22)+(1*21)+(1*20) = 1011
101(1) --> 101 --> (1*22)+(0*21)+(1*20) = 4+0+1 =5

Binary shift
Arithmetic Shift

Stanga

Dreapta

LSB cel mai putin semnificativ bit


MSB cel mai semnificativ bit (high-order bit)

Logical Shift

Stanga

Dreapta

Exemplu
1029 = 10000000101 == 2**10 + 2**2 + 2**0 == 1024 + 4 + 1

Functiile
- poriuni de program reutilizabile;
- permit alocarea de nume unui bloc de declaratii si puteti rula acel bloc de declaratii n
program de cate ori vreti (apel al funciei)
- functiile sunt definite folosind cuvantul cheie def nume_functie ( ) ;
- accepta parametri (ca valori furnizate functiei) care sunt specificati ntr-o pereche de
paranteze n definitia functiei, separate prin virgule;
!!! terminologie - numele date n functie se numesc parametri n timp ce valorile
furnizate n apelul functiei se numesc argumente.
- variabile n interiorul definitiei funciei nu au nici un fel de legtur cu variabilele din
afara definitiei functiei, chiar dac au avea acelai nume si se numaesc variabile
locale ale functiei;
- atribuirea de valoare nume definit la nivelul cel mai nalt al programului (adic nu n
interiorul domeniului funciei sau clasei), va trebui s-i spunei lui Python c acel nume
nu este local ci este global si folosim declaratia global.
- este imposibil ca n interiorul unei funcii s atribui o valoare unei variabile definite n
afara funciei fr declaraia global;
-exist un domeniu specific funciilor, numit "nonlocal" i care se afl ntre cele dou
(definirea de functii in interiorul functiilor);

- parametri opionali pot fi folositi ca valori implicite n cazul n care nu este furnizata o
valoare pentru parametrul respectiv (specificarea valorilor implicite ale argumentelor n
definitia functiei se face punnd operatorul de atribuire (=) urmat de valoarea implicit);
- valoarea implicit a argumentului trebuie sa fie o constant.
- se pot da valori parametrilor prin numele lor (argumente cuvnt cheie - in locul
pozitiei pentru a specifica argumentele functiei)
- se poate defini o funcie care s ia orice numr de parametri folosind (*);
- facilitate numit documentation strings (docstrings)
Exemplu:
#!/usr/bin/python3.1
# Fiier: functii.py
def sayHello():
print('Hello World!') # blocul funciei
# Sfritul funciei
sayHello() # apel la funcia sayHello()
sayHello() # din nou apel la funcia sayHello()

Parametrii funciilor
O funcie poate accepta parametri; sunt ca variabilele numai c valorile acestor
variabile sunt definite n momentul apelului funciei i deja le sunt atribuite valori la
momentul executrii blocului funciei. Specificai ntr-o pereche de paranteze n definiia
funciei, separate prin virgule.
#!/usr/bin/python3.1
# Fiier: functii.py
def printMax(a, b):
if a > b:
print(a, 'este cel mai mare')
elif a == b:
print(a, 'este egal cu', b)
else:
print(b, 'este cel mai mare')
printMax(6,8) # argumente date prin literali
x = 5
y = 12
printMax(x, y) # argumente date prin variabile

Variabile locale
Variabile n interiorul definiiei funciei nu au nici un fel de legtur cu variabilele din
afara definiiei funciei, nici chiar dac ar avea acelai nume, de aceea se numesc
variabile locale funciei.
Variabilele au ca domeniu blocul n care sunt declarate, ncepnd cu punctul n care a
fost definit numele ei.
#!/usr/bin/python3.1
# Fiier: functii.py
x = 115
def func(x):
print('x este', x)
x = 6
print('Am schimbat x local n ', x)
func(x)
print('x este tot ', x)

Folosirea declaraiei global


Atribuirea de valoare unui nume definit la nivelul cel mai nalt al programului (adic
nu n interiorul domeniului funciei sau clasei), va trebui s-i spunei lui Python c acel
nume nu este local ci global . (declaraia global). Este imposibil ca n interiorul unei
funcii s atribui o valoare unei variabile definite n afara funciei fr declaraia global.
#!/usr/bin/python3.1
# Fiier: functii.py
x = 50
def func():
global x
print('x is', x)
x = 2
print('Am schimbat x global n ', x)
func()
print('Valoarea lui x este', x)

Folosirea declaraiei nonlocal


Exist un domeniu specific funciilor, numit "nonlocal" i care se afl ntre cele
dou. Domeniile nonlocal se observ cnd definii funcii n interiorul funciilor.
#!/usr/bin/python
# Fiier: functii.py
def func_out():
x = 3
print('x este', x)
def func_in():
nonlocal x
x = 7
func_in()
print('x local a devenit ', x)
func_out()

Valori implicite ale argumentelor


Pentru unele funcii, puteti face unii parametri opionali i s folosii valori implicite
n cazul n care nu se furnizeaz o valoare pentru parametrul respectiv (valoare
implicita ale parametrilor). Se pot specifica valorile implicite ale argumentelor n
definiia funciei, punnd operatorul de atribuire (=) urmat de valoarea implicit
(valoarea implicit a argumentului trebuie s fie o constant)
Numai parametrii de la sfritul listei de parametri pot avea valori implicite deci nu
putei avea un parametru cu valoare implicit naintea altuia fr valoare implicit n
lista de parametri a functiei deoarece valorile sunt atribuite parametrilor prin pozitie
#!/usr/bin/python3.1
# Fiier: functii.py
def spune(mesaj, ori = 1):
print(mesaj * ori)
spune('Cucu Bau')
spune('Hau', 7)

Argumente cuvnt cheie


In cazul unor funcii cu muli parametri specificarea numai a unora, se realizeaza
prin atribuirea de valori parametrilor prin numele lor. Se pot da valori numai unor
parametri selectati, cu conditia ca toi ceilalti sa aib n definitia functiei valori implicite.
#!/usr/bin/python3.1
# Fiier: functii.py
def func(a, b=10, c=20):
print('a este', a, 'i b este', b, 'i c este', c)
func(6, 8)
func(250, c=240)
func(c=500, a=200)

Parametri VarArgs
Se poate defini o funcie care s ia orice numr de parametri, folosind asteriscul (*).
#!/usr/bin/python3.1
# Fiier: functii.py
def total(initial=5, *numere, **keywords):
numarator = initial
for numar in numere:
numarator += numar
for cheie in keywords:
numarator += keywords[cheie]
return numarator
print(total(11, 5, 7, 10, caiete=50, pixuri=100))

Parametri exclusiv cuvnt cheie


Specificarea anumitor parametri cuvnt cheie pentru a fi disponibili numai n forma
cuvnt cheie i niciodat ca parametri poziionali, se realizeaza prin declarare dup un
parametru cu asterisc.
#!/usr/bin/python3.1
# Fiier: functii.py
def total(initial=5, *numere, caiete):
numarator = initial
for numar in numere:
numarator += numar
numarator += caiete
return numarator
print(total(10, 1, 2, 3, caiete=50))
print(total(10, 1, 2, 3))
# Ridic o eroare pentru c nu am furnizat o valoare implicit
pentru 'caiete'

Declaraia return
Declaraia return este folosit pentru a ne ntoarce dintr-o funcie.
#!/usr/bin/python3.1
# Fiier: functii.py
def maximul(x, y):
if x > y:
return x
else:
return y
print(maximul(2, 3))

DocStrings
Python are o facilitate numit documentation strings, (docstrings).V ajut s documentai
programele mai bine i le face mai uor de neles.
Ex: Poate s extraga irurile de documentare ale unei funcii chiar n timp ce programul
ruleaz. Putem accesa docstringul funciei printMax folosind atributul __doc__ (observai
dublu underscore) al funciei.
#!/usr/bin/python3.1
# Fiier: functii.py
def printMax(x, y):
'''Tiprete pe ecran cel mai mare din dou numere.
Cele dou numere trebuie s fie ntregi.'''
x = int(x) # convertete n integer, dac este posibil
y = int(y)
if x > y:
print(x, 'este cel mai mare')
else:
print(y, 'este cel mai mare')
print(printMax.__doc__)
printMax(7, 8)

Universitatea din Bucureti Facultatea de Geografie


Master GiS

Va mulumesc

OpenGiS.ro / 2014