Anuncios

Bienvenidos sean a este post, hoy veremos algunas consideraciones a la hora de usar comprensiones y generadores.

Anuncios

Uno de los primeros puntos que hablaremos sera sobre la performance, si bien la legibilidad es algo fundamental la performance tambien lo es y esta viene siendo afectada por dos temas como son el espacio y el tiempo, hablemos primero del espacio.

Anuncios
Anuncios

Cuando nos referimos al espacio estamos hablando sobre el tamaño que tendra la estructura en memoria, por lo tanto debemos tener en cuenta varios puntos, el primero va a ser si el tipo de informacion que necesitamos manejar sera llamado una sola vez o varias veces, para el primer caso seria mejor una funcion generadora (como vimos en este post) pero en el caso de que esta informacion sera referenciada desde multiples lugares o bien se necesite mas de una vez en el codigo es recomendable usar la forma tradicional, por lo tanto deben tener esto en cuenta a la hora de manejar la informacion porque a la larga puede derivar en errores de nuestro codigo, pasemos al siguiente elemento.

Anuncios
Anuncios

El otro elemento es el tiempo y este es cuando nos referimos a que una funcion X es mas rapida que una funcion Y pero como se daran cuenta en los tiempos actuales es un tema dificil de determinar porque la diferencia entre ellos es muy corta pero recuerden lo que hablamos en este post donde citabamos un ejemplo de como un milisegundo en grandes cantidades de informacion nos puede ahorrar muchas horas de procesamiento, pero para entender el concepto si analizamos los tiempos de procesamiento en python veremos que map o list son mucho mas rapido que for y esto es debido a que los dos primeros corren su codigo sobre C y el ultimo lo corre sobre el nucleo de python dentro de una maquina virtual lo cual genera mas procesamiento y por ende mas lento.

Anuncios

Otro tema que suele ocurrirnos es que despues de visto los ultimos temas se intenta utilizarlo en demasia y esto deriva en expresiones muy dificiles de leer debido a su complejidad, y esto deriva en un problema mas grave como es legibilidad y capacidad de poder depurar, buscar un error, en nuestro codigo (un tema que veremos mucho mas adelante), analicemos algunas de las lineas del zen de python:

>>> import this
The Zen of Python, by Tim Peters

Explicit is better than implicit.
Simple is better than complex.
Readability counts.
If the implementation is hard to explain, it's a bad idea.
>>>
Anuncios

Estas son solo algunas pero seran las que deberemos tener mas en cuenta, veamos las traducciones:

  • Explicit is better than implicit: explicito es mejor que implicito
  • Simple is better than complex: simple es mejor que complejo
  • Readability counts: la legibilidad cuenta
  • If the implementation is hard to explain, it’s a bad idea: si la implementacion es dificil de explicar, es una mala idea
Anuncios

Como pueden ver es un poco lo que vinimos viendo hasta ahora, esto es debido a que la hora de usar tanto comprensiones como funciones generadoras a medida que vayamos usando mas elementos dentro de ellos estos iran creciendo hasta que en un punto seran completamente ilegibles, esto no significa que debamos dejar de usarlo sino todo lo contrario debemos usar como todo en este lenguaje mientras sea legible, facil de modificar e implementar.

Nota: 
Si quieren ver el zen de python completo ejecuten import this
Anuncios
Anuncios

Por ultimo hablaremos sobre las conductas de generacion de nuestras funciones internas, esta es una principal diferencia entre la version 2 y la version 3 porque algunas funciones como map, zip y filter se modificaron para devolver objetos que se comportan como iterables, esto es debido a que si uno necesita un objeto de tipo list utilice la list para generarlo pero si necesitamos iterar y que el impacto en memoria sea el menor posible hacemos entrar en accion algunas de estas funciones, otro ejemplo es la funcion range de la version 2 la cual nos devuelve un list y para generar un objeto iterable se debe usar a xrange pero a partir de la version 3 se elimino esta funcion y se modifico a range para que tenga esta conducta, esto es parte del zen de python porque intentamos reducir el espacio en memoria siempre que sea posible, especialmente en aquellas funciones que se utilizan mas habitualmente.

Anuncios

En resumen, hoy hemos visto algunas consideraciones que debemos tener en cuenta, ya sea desde la performance, las dos principales elementos que nos afectan, luego vimos porque no debemos abusar del uso de comprensiones y generadores, por ultimo hablamos sobre una diferencia que existe entre la version 2 y la version 3, tambien como esto nos termino beneficiando, tambien mencionamos algunas de las consideraciones en las que se basa este lenguaje y les recomiendo siempre tenerlo en mente, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00