[Python] l'amore per il pitone
Marco Beri
marcoberi a gmail.com
Mar 17 Set 2013 16:19:19 CEST
2013/9/17 Piergiuliano Bossi <pgbossi a gmail.com>
> Esempio 1
> I lambda in python sono verbosi e visto che i vari map, reduce, filter,
> ... non sono metodi della collezione, si compongono in modo che io
> percepisco come innaturale.
> Ad esempio, diciamo che abbiamo un array di interi e vogliamo somarne i
> cubi.
>
> Ruby:
> >> a = [1, 7, 22, 3]
> => [1, 7, 22, 3]
> >> a.map{|x| x*x*x }.reduce{|sum, x| sum + x}
> => 11019
>
> Scala:
> scala> val a = Array(1, 7, 22, 3)
> a: Array[Int] = Array(1, 7, 22, 3)
>
> scala> a.map(x => x*x*x).reduce((sum, x) => sum+x)
> res1: Int = 11019
>
> Python:
> >>> a = [1, 7, 22, 3]
> >>> reduce(lambda sum, x: sum+x, map(lambda x: x*x*x, a))
> 11019
>
> Rendo l'idea? Python non solo e' il piu' verboso (perche' devi ripetere
> "lambda"), ma non ti consente di comporre i metodi naturalmente (in questo
> python e' piu' FP-oriented degli altri, ma faccio piu' fatica a leggerlo,
> immaginatevi di comporre 4 o 5 manipolazioni o piu', che e' una cosa che si
> fa abbastanza naturalmente in Scala o Ruby (o Smalltalk, che poi e' il
> precursore di questo stile).
>
Secondo me non hai ancora conosciuto le list-comprehension:
>>> a = [1, 7, 22, 3]
>>> sum(x**3 for x in a)
11019
Beat that :-)
Ciao.
Marco.
--
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130917/ca3e28a4/attachment.html>
Maggiori informazioni sulla lista
Python