Revizia anterioară Revizia următoare
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. Limbajul e misto si destul de repede prinzi chestiile elementare ca sa ajungi sa te descurci.
Si metoda de invatare pe care am folosit-o a fost una misto. Am intrat pe siteul projecteuler.net si am facut primele 50 de probleme. Project Euler e un site cu in jur de 200 de probleme si fiecare problema are ca raspuns un numar. Astfel poti sa incerci sa gasesti rezultatul folosind creionul si hartia sau sa codezi un program in orice limbaj.
Imi plac mai multe chestii si deabia am inceput cu el.
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 limbajul e destul de intuitiv, si 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 tipurile sunt weakly typed care inseamna ca limbajul suporta programarea cu generice si astfel putem avea programe de genul:
<code>
def suma(a, b):
return a + b
print suma(1, 2)
print suma("mere", "pere")
</code>
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:
<code>
>>> map(int, ["1", "2", "3"]) # obtinem din un sir de stringuri un sir de intregi
[1, 2, 3]
>>> reduce(lambda x,y: x + y, [1, 2, 3]) # facem suma elementelor din un sir
6
>>> filter(lambda x: x % 2 == 0, [1, 2, 3]) # filtra elementele impare
2
</code>
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:
<code>
>>> [x**2 for x in range(1, 5)] # patratele numerelor de la 1 la 4
[1, 4, 9, 16]
>>> a, b = [1, 2, 3, 4], [1,4,8,16] # pentru doi vectori a si b
>>> [x + y for x in a for y in b] # vrem toate sumele posibile intre un element din a si unul din b
[2, 5, 9, 17, 3, 6, 10, 18, 4, 7, 11, 19, 5, 8, 12, 20]
</code>