Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/02/2012, 13:06
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Dudilla en generadores

Los iterables se pueden dividir en 2 partes:
- Gerenadores
- No generadores

Los generadores van generando una serie de objetos al vuelo. Mientras que cualquier otro iterable los almacena.

Esto tiene ventajas y desventajas:
Los generadores ocupan menos memoria y son mas eficientes en cuanto al uso del CPU. Los generadores pueden ser infinitos y por lo tanto no puedes saber su longitud ademas no puedes acceder a ellos por medio de indices. Una vez usado un generador no puedes volver a usarlo. Tienes que instanciar uno nuevo.

¿En que casos es conveniente usar un generador?
En la mayoría de los casos, excepto en los casos donde necesites guardar en memoria una serie de objetos o necesites acceder a valores previamente calculados.

Si tu imprimes una lista, python te imprime su representación por que es un objeto de tamaño finito y ademas puedes iterarlo cuantas veces quieras. En cambio como un generador puede o no ser finito y ademas como solo puede ser una vez, así que no va a iterar sobre el generador y después que quede inservible.

Así que cuando imprimes un generador lo único que hace es decirte de que clase es y la localidad de memoria donde se encuentra.