Introducción
Es de interés para todo programador, que sus códigos se ejecuten con la mayor rapidez posible. Al ejecutarse un programa rápidamente, se puede ahorrar dinero porque ya no es necesario utilizar un hardware con altas prestaciones y, además, el usuario se sentirá más cómodo al apreciar los resultados de su interacción con la computadora más rápidamente.
Python es un lenguaje interpretado, lo cual le hace lento comparado con C o C++, ya que éste último es compilado[1] y, aunque muchas de sus librerías son compiladas en C++ para que un programa se ejecute más rápidamente[2], mucho del código aún debe ser interpretado, lo cual ralentiza el programa global.
Consejos para agilizar la ejecución de los programas
Existen muchas publicaciones que brindan consejos para ejecutar los programas más rápidamente, entre otras, pueden mencionarse[3]:
- Especifique tipos de datos en Python. Python utiliza un tiempo importante en detectar el tipo de variable a utilizar según el contexto en muchas ocasiones, lo cual no sucede si se declara el tipo desde el la creación de la misma.
- Reemplace listas con expresiones generadoras. Especialmente cuando se utilizan operaciones que aglutinan un conjunto de datos; es mejor aplicar la expresión aritmética directamente a una función que a una lista de números. Este código sum([num**2 for num in range(1000000)]) tarda más que éste sum((num**2 for num in range(1000000)))
- Reemplace variables globales con variables locales. Las variables locales se ejecutan más rápidamente, dado su contexto.
- Evite importar librerías completas. Es mejor utilizar from A import B, ya que de esta manera se reduce el tiempo de ejecución de las funciones o métodos importados.
En los lenguajes de programación orientados a objetos se disponen de clases y funciones. Las primeras tienen métodos que se parecen mucho a las funciones, ya que entregan un resultado después de procesar información correspondiente a sus argumentos de entrada.
La tabla 1 muestra las diferencias entre los métodos y las funciones[4].
![]() |
| Tabla 1. Diferencias entre métodos y funciones. |
Un experto opina[5]:
“ La función proporciona su propio entorno para las variables, por lo que la metatabla cambia para adaptarse al nuevo entorno, y cuando la función finaliza, el entorno vuelve al estado de la capa exterior. En un estado ideal, una función no debería tener efectos secundarios.
La clase, por otro lado, sirve para la generación de objetos. Tras la inicialización, los objetos se crean y almacenan como tablas hash con sus respectivas direcciones. Con el tiempo, dichos objetos se eliminan de la memoria, ya sea manualmente o mediante la recolección de elementos no utilizados.”
Exposición del caso
Sin embargo, en el IIIE (Instituto de Investigación e Innovación en Electrónica) de la Universidad Don Bosco, se ha llevado un proyecto que permite comparar la ejecución entre funciones y métodos, desarrollado en una raspberry-pi utilizada para realizar el reconocimiento de rostros. Dado que un IoT tiene prestaciones limitadas, se pensó en una forma para optimizar el programa, proponiéndose utilizar clases con sus respectivos métodos para procesar la información en lugar de funciones aisladas.
La figura 1 muestra los diagramas de flujo utilizados para métodos y funciones.
![]() |
| Fig. 1 Diagramas de flujo: a) Usando funciones, en cada bloque indicado con (1), b) Usando métodos de clase creados al inicio del programa y usados en bloques (2) |
Los resultados se muestran en la tabla siguiente, donde se tienen dos procesos principales “Espera” e “Identificación total”. Para cada uno de ellos se midió el tiempo de ejecución, siendo T1 con la aplicación de funciones y T2 con el uso de clases. En la columna “T2/T1” puede apreciarse en una notación de porcentaje, la relación de tiempos para la ejecución del código, evidenciando que el uso de clases ha reducido a 70% y 33% el tiempo de espera e identificación total, respectivamente.
![]() |
| Tabla 2. Comparativa en los tiempos de ejecución utilizando funciones (T1) y utilizado clases con sus respectivos métodos (T2) |
Utilizar clases con sus respectivos métodos para procesar la información que administra un programa, reduce el tiempo de ejecución al optimizar los recursos de hardware. Por tanto, se recomienda utilizar esta práctica en lugar de múltiples funciones independientes.
Lecturas recomendadas
- Python Classes and Objects [Enlace]
- Classes [Enlace]
- Python Objects and Classes [Enlace]
- Speed Up Python Code [Enlace]
- Optimization Tips for Python Code [Enlace]
- Performance tips [Enlace]
- Optimizing Your Python Code [enlace]
- Python Performance Tuning: 20 Simple Tips [Enlace]
Vídeos recomendados
- Python OOP Tutorial 1: Classes and Instances [Enlace]
- Python Classes and Objects - OOP for Beginners [Enlace]
- Python Classes and Objects || Python Tutorial || Learn Python Programming [Enlace]
- Python Object Oriented Programming (OOP) - For Beginners [Enlace]
Referencias
[1] https://www.geeksforgeeks.org/difference-between-compiled-and-interpreted-language/[2] https://www.pythonpool.com/precompiled-standard-library-in-python/
[3] https://towardsdatascience.com/10-techniques-to-speed-up-python-runtime-95e213e925dc
[4] https://techvidvan.com/tutorials/python-methods-vs-functions/
[5] https://www.quora.com/Are-classes-slower-than-functions-in-Python



No comments:
Post a Comment