On 30/04/10 13:45, Francisco Javier Cuadrado wrote:

Podrías explicarme esto un poco más, supongo que te refieres a que
cuando me encuentre algo así:

d = {}
for k in [1,2,3,4]:
   d[k] = k

Es mejor hacer:

d = dict ((k, k) for k in [1,2,3,4])

Sí, ésa es la idea. Y puedes generalizarla: imagínate que el valor (o la clave, o los dos) no fuera simplemente "k", sino algo mucho más complicado. Entonces ese proceso lo abstraes en una función:

d = dict((k, get_value(k)) for k in [1,2,3,4])

O también puedes crear un generador que devuelva los pares (key, value) transformados a partir de la lista. En fin, que hay muchas formas de hacerlo, depende de cada caso.

El patrón "inicializar variable + iterar + actualizar variable" se considera no-funcional, y es algo que se puede evitar desde que Python tiene listas por comprensión (list comprehensions) y expresiones generador (generator expressions).

Un pequeño detalle (que liga con la respuesta anterior de Juan Ignacio). La diferencia entre:

1) d = dict([(k, k) for k in [1,2,3,4]])
2) d = dict((k, k) for k in [1,2,3,4])

es que 1) crea una lista (enterita) mientras 2) crea un generador (perezoso). Muchas veces (en este caso es clarísimo), lo más adecuado es un generador. Por cierto, parece que a 2) le faltaran paréntesis y se tuviera que escribir:

3) d = dict(((k, k) for k in [1,2,3,4]))

Pero ese nivel extra de paréntesis no es necesario porque el parser es lo suficientemente listo para entender que le estás mandando un generador.

-

Más sobre programación funcional:

http://en.wikipedia.org/wiki/Functional_programming
http://docs.python.org/dev/howto/functional.html
http://www.ibm.com/developerworks/library/l-prog.html
http://linuxgazette.net/109/pramode.html

Pido disculpas por el proselitismo descarado, pero según uno va profundizando en la programación funcional se da cuenta que la distancia que media entre tener una aplicación compuesta por un conjunto de funciones con entradas y salidas sin efectos colaterales, a tener una amalgama de código con variables de estado que van cambiando dios sabe cómo, cuándo y por qué, es abismal.
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a