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/