Comentarios sobre python 2.4

Francesc Alted falted en pytables.org
Jue Jul 29 18:40:28 CEST 2004


A Dijous 29 Juliol 2004 18:04, Chema Cortés va escriure:
> ¿conocéis algún buen ejemplo de para qué se pueden usar? ¿creéis que tendrán
> tanto éxito como la compresión de listas? ¿no creéis que la sintáxis del python
> empieza a complicarse demasiado?

Pues como dice el PEP, creo que van a valer básicamente para deshacernos del
filter() y map(). No sé porqué, pero siempre me han parecido un poco
engorrosas esas funciones. Sin embargo, con expresiones generadoras, se
hacen mucho más elegantes.

Por ejemplo, imaginemos que queremos disponer de los valores de una función
para su uso en un cálculo, pero no queremos usar memoria para disponer de
ellos. Simplemente, definimos la expresión generadora:

>>> gen=(math.sin(x) for x in range(10))

y ya está lista para su uso:

>>> gen=(math.sin(x) for x in range(10))
>>> for i in gen: print i
...
0.0
0.841470984808
0.909297426826
0.14112000806
-0.756802495308
-0.958924274663
-0.279415498199
0.656986598719
0.989358246623
0.412118485242

bonito, no? Aunque este ejemplo está traido de los pelos, ya que un nuevo
uso del generador nos dé lo siguiente:

>>> for i in gen: print i
...
>>>

o sea, que se ha agotado y ya no produce más. No sé cómo solucionar eso :-/,
pero recrear el generador lo hace funcionar de nuevo.

Yo principalmente le veo la ventaja en modo interactivo, ya que puedes hacer
muchas pruebas en una sola linea de comando y lo veo más elegante que map()
o filter(). Supongo que, como las listas comprensivas, al principio pueden
chocar un poco, pero después ya no tienes ganas de usar otra cosa. 

Respecto a si complica a Python? yo creo que no, por lo menos a mi me gustan
esas "complicaciones" :)

-- 
Francesc Alted




Más información sobre la lista de distribución Python-es