[Python] l'amore per il pitone

Manlio Perillo manlio.perillo a gmail.com
Mar 17 Set 2013 19:43:13 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 17/09/2013 18:46, Piergiuliano Bossi wrote:
> [...] On 17/09/2013 18:34, Piergiuliano Bossi wrote:
>> [...] Ad esempio, data una lista di interi, per estrarre quelli 
>> piu' grandi di 5:
>> 
>>>>> a = [2, -4, 27, 44, 13, 0] filter(lambda x: x > 5, a)
>> [27, 44, 13]
>>>>> [x for x in a if x > 5]
>> [27, 44, 13]
>>>>> 
>> 
>> Immagino che tu vada diretto con la seconda, mentre a me viene 
>> naturale la prima (la trovo piu' "intention revealing", dice 
>> chiaramente che sto filtrando la lista).
>> 
>> Torna?
>> 
> 
> No, perch│ la versione Python │ altrettanto compatta, e chi ha 
> esperienza con Python non ha problemi a capire le intenzioni del
> codice.
> 
> 
> Intendevo "torna" l'uso della comprehension con un if embedded.
> 

Ah, ok; si torna.

> Detto cio', non mi puoi dire seriamente che la versione con la 
> comprehension e' altrettanto comunicativa: il problema non e'
> capirla in toto, il problema e' che devi leggerti tutta la
> comprehension per sapere se otterrai una collezione con la stessa
> numerosita', se stai trasformando gli elementi o cosa. Se inveci
> usi filter, map, ecc. lo sai al volo, non devi leggere il dettaglio
> della trasformazione. Questo e' il nocciolo di come manipolare le
> collezioni che deriva dal mondo Smalltalk.
> 
> Comunque, ribadisco, non voglio mica convincervi, neh... :)
> 

Non c'è bisogno.
Ti ho consigliato Haskell, no?
Io l'ho studiato per un pò di tempo ed è uno dei miei linguaggi
preferiti; ma uso Python perchè sono più produttivo.

Tra l'altro se vuoi la versione più verbosa/leggibile, puoi sempre
usare filter e reduce.

Però tieni conto che le chiamate a funzione, in Python, non sono molto
efficienti (ed infatti è una cosa che spesso mi da fastidio, dato che
mi ritrovo spesso a comporre piccole funzioni).

Inoltre tieni conto che in Python 3.x, reduce non è più una funzione
builtin, ma è stata spostata nel modulo functools (invece filter è
ancora una builtin).


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Icedove - http://www.enigmail.net/

iEYEARECAAYFAlI4lLEACgkQscQJ24LbaURuHACghV393MAqkxc+VQeK/j9WVaiU
XuMAnikUy4sl4/Jx7jSdt83HfvqZ95aL
=nFVc
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python