Sunteți pe pagina 1din 4

http://www.infoarena.

ro/blog/De-ce-Python
Am tot auzit lucruri bune despre limbajul de programare Python si unde lucrez are o sustinere destul de
mare. Am devenit din ce in ce mai curios si la inceputul verii am scris cateva programele ca sa imi incerc
puterile.

Pentru ca inveti un limbaj nu prin a citi o gramada de carti ci prin lucra in el, am cautat o modalitate de a
scrie cateva programe simple. Am intrat pe projecteuler.net . Acesta e un site cu in jur de 200 de
probleme si fiecare problema are ca raspuns un numar. Poti incerca sa gasesti rezultatul folosind
creionul si hartia sau sa codezi un program in orice limbaj. Dupa ce ai rezolvat o problema ai acces la
threadul de pe forum unde discuta cei ce au rezolvat problema. Acolo sunt multi oameni care isi
posteaza rezolvarile cat mai concise sau cat mai eficiente si astfel vezi mai multe solutii diferite de a ta si
inveti smecherii de limbaj sau algoritmi mai buni.

Dupa cateva luni imi place limbajul foarte mult. Chestia cea mai misto e ca am ajuns sa ma simt
productiv foarte repede in el. E un limbaj interpretat asa ca nu trebuie sa astepti dupa compilare. Pe
langa asta are o consola in care poti sa incerci sa vezi ce fac diverse bucati de cod. Lucru foarte util cand
nu stii limbajul. De asemenea este destul de intuitiv. S-a intamplat de mai multe ori sa nu fiu sigur de
cum se fac unele lucruri, sa le incerc si sa mearga.

Alt avantaj este acela ca limbajul e dynamically si strongly typed. Asta inseamna ca nu o sa iti mai bati
capul ca in C++ cu erori interminabile de compilare si mai inseamna ca limbajul suporta programarea cu
generice. Astfel putem avea programe de genul:

?
1
2
3
4
5
6
>>> def suma(a, b):
... return a + b

http://www.infoarena.ro/blog/De-ce-Python
>>> suma(1, 2)
3
>>> suma('mere', 'pere')
'merepere'
Imi place ca indentarea codului face parte din limbaj, aceasta restrictie ajuta mult la lizibilitatea
programelor pentru ca impune un stil de codat similar pentru toata lumea. Iar lizibilitatea unui cod este
foarte importanta, pentru ca petrecem mult mai mult timp citind cod decat scriind cod nou.

De asemenea limbajul incearca sa ajute programatorul cat mai mult, izoland detalii care nu sunt
importante. De exemplu la operatiile pe intregi avem implementate numere mari si nu mai trebuie sa
avem grija sa nu facem overflow.

Este un limbaj succint. Spre deosebire de java, pentru a face ceva nu trebuie sa scrii foarte mult.

Are foarte multe librarii, unele dintre ele intrate deja in limbajul de baza. Ca exemple as aminti NumPy,o
librarie de calcule numerice, care contine printre altele metode din algebra liniara sau generatoare de
numere aleatoare, sqlite care se ocupa cu operatii pe o baza de date si PIL o librarie de prelucrare a
imaginilor.

In Python se poate folosi si paradigma programarii functionale. El are elemente ca map(), reduce(),
filter(), si operatorul lambda.
Metoda map(functie, secventa) ne intoarce o lista care sunt rezultatele aplicarii functiei peste
elementele unei secvente. Operatorul reduce(functie, lista) ne intoarce rezultatul aplicarii cumulate a
functiei peste elementele secventei. Putem scrie cod de genul:

?
1
2
3

http://www.infoarena.ro/blog/De-ce-Python
4
5
6
7
8
9
>>> # un sir de intregi din unul de stringuri
>>> map(int, ["1", "2", "3"])
[1, 2, 3]
>>> # suma elementelor din un sir
>>> reduce(lambda x,y: x + y, [1, 2, 3])
6
>>> # filtram elementele impare
>>> filter(lambda x: x % 2 == 0, [1, 2, 3])
[2]
Faptul ca limbajul nu este unul pur functional, face invatarea ideilor din programarea functionala mai
usoara.

Mai imi plac si list comprehensions care sunt doar zahar sintactic, dar le folosesc destul de des. Ele sunt
o modalitate naturala si succinta de a crea liste. Va dau mai jos cateva exemple:
?
1
2
3
4
5

http://www.infoarena.ro/blog/De-ce-Python
6
7
8
>>> # patratele numerelor de la 1 la 4
>>> [x**2 for x in range(1, 5)]
[1, 4, 9, 16]
>>> # pentru doi vectori a si b
>>> a, b = [1, 2, 3, 4], [1,4,8,16]
>>> # toate sumele intre un element din a si unul din b
>>> [x + y for x in a for y in b]
[2, 5, 9, 17, 3, 6, 10, 18, 4, 7, 11, 19, 5, 8, 12, 20]
Si imi mai plac tuplurile pentru ca de multe ori ai nevoie de cate un tip de date rapid. De exemplu un
punct 3 dimensional il putem obtine ca punct = (-1, 0, 11).

Ca minusuri, unul mare este eficienta. Astfel cand scriam solutii pentru probleme de la google code jam,
unele erau de 50 pana la 100 de ori mai incete ca varianta implementata in java sau C++. Dar cred ca
productivitatea programatorului este mult mai importanta ca eficienta codului, iar Python lucreaza bine
cu limbajul C si bucatile ineficiente pot fi reimplementate in C.

Sper ca, daca nu ati lucrat deja in Python, v-am trezit putin apetitul. Daca aveti deja experienta cu
Python ce caracteristici v-au placut? Cei care nu sunt convinsi inca pot citi aici cum se poate face un spell
corrector in 21 de linii de Python.

S-ar putea să vă placă și