Alt avantaj este acela ca tipurile sunt dynamically si weakly 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:
== code(c) |
<code>
>>> def suma(a, b):
... return a + b
>>> suma(1, 2)
3
>>> suma("mere", "pere")
'merepere'
==
</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.
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(c) |
<code>
>>> map(int, ["1", "2", "3"]) # un sir de intregi din unul de stringuri
[1, 2, 3]
>>> reduce(lambda x,y: x + y, [1, 2, 3]) # suma elementelor din un sir
6
>>> filter(lambda x: x % 2 == 0, [1, 2, 3]) # filtram 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(c) |
<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>
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. Iar daca ati lucrat ce caracteristici v-au placut.