No es el aumento diario, sino la disminución diaria. Hackea lo que no es esencial.
Bruce Lee
Bienvenidos sean a este post, hoy veremos si podemos poner la segunda parte de la frase en accion.
Algunas veces no necesitamos empujar nuestro codigo al limite solamente para lograr una mejora insignificante si esto significa sacrificar la legibilidad y/o manteniemiento, por ejemplo que una pagina web habra en 1 segundo en lugar de 1.05 segundos no nos brinda una mejor experiencia si por ello tenemos un codigo dificil de interpretar, en cambio si es razonable hacer este sacrificio para mejorar la respuesta de un programa que es llamado cientos de veces donde cada milisegundo ahorrado cuenta.
En los proximos posts nos centraremos en ver algunas herramientas que no empujaran tu codigo al limite de performance y optimizacion «sin importar la razon» sino mas bien para permitirte escribir codigo de forma eficiente y elegante que se lee bien, corre rapido y no desperdicia recursos, en los proximos posts nos centraremos en las siguientes funciones:
- Map, zip y filter
- Comprensiones
- Generadores
Recuerden que las performances de cada tema que veamos siempre va a depender del hardware que estemos utilizando pero volviendo al tema del post veamos el siguiente ejemplo:
def cuadrado(n):
return n ** 2
def cuadrado2(n):
return n * n
Estas dos funciones hacen la misma tarea, devolver el cuadrado de un valor informado, pero una lo hara de la forma que nos provee python y la otra es de la forma tradicional que debemos hacer en cualquier lenguaje, si utilizamos un workbench para analizar la performance de las funciones nos sorprenderemos que la segunda funcion sera mas rapida que la primera por la simple razon de que en esta simplemente hara una operacion de multiplicacion y no una operacion de potenciacion, esto es importante dependiendo del contexto que debemos usarlo (como mencionamos antes) porque en un programa de E-COMMERCE dificilmente hagamos una operacion de potenciacion y si lo hacemos sera muy esporadicamente, por lo tanto podemos usar la primera funcion en lugar de la segunda por un tema de legibilidad pero que sucede cuando debemos manejar grandes cantidad de datos? Por ejemplo si tenemos un millon de clientes conectados a este programa y nosotros podemos ganar 1/10 de un segundo de la funcion, al ser llamado un millon de veces ahorramos unos 100000 segundos lo cual equivale a unas 27 horas aproximadamente, ahora tomo otro color verdad?
Vamos a hablar un poco sobre colecciones, en posts anteriores hemos visto que envolviamos el codigo por medio del constructor list, dado que esto nos permitia pasar toda la informacion y objetos en una lista nueva para poder imprimir su contenido facilmente, esto nos dificulta la legibilidad pero para evitar esto podemos usar un alias, veamos el siguiente ejemplo:
>>> range(7)
range(0, 7)
>>>
En este caso vemos como nos devuelve la ejecucion de un range, ahora envolvamos a esta funcion con un list:
>>> list(range(7))
[0, 1, 2, 3, 4, 5, 6]
>>>
Ahora la informacion vino completamente expandida a diferencia del caso anterior, nuestro siguiente paso sera la creacion del alias para list y para ello haremos lo siguiente:
>>> _ = list
La operacion realizada fue decir que el guion bajo o undercore (_) equivale a list, para verificar su uso vamos a ejecutar el siguiente codigo:
>>> _(range(7))
[0, 1, 2, 3, 4, 5, 6]
>>>
Observen que hace exactamente lo mismo que al utilizar el list, esto gracias al alias antes creado, en este caso use el guion bajo pero se puede usar cualquier caracter como comodin para reemplazar a list o la funcion que deseemos asignarle un nuevo alias, esto nos dara una mejor performance a la hora de escribir nuestro codigo y tambien mejora un poco la legibilidad porque no nos hara un codigo tan largo y complejo, en los proximos posts veremos mas herramientas y procedimientos parecidos para mejorar nuestros codigos.
Nota: Esto es muy similar a lo que podemos hacer en Lua tambien
En resumen, hoy hemos visto como podemos mejorar la performance de nuestros codigos, hemos visto como una operacion tan simple nos puede ayudar incomensurablemente, tambien hemos hablado en que debemos enfocarnos para mejorar la performance pero sin tener que sacrificar la legibilidad del codigo innecesariamente, espero les haya gustado 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.


Donación
Es para mantenimento del sitio, gracias!
$1.00
