En esta entrada aprenderemos sobre el Entry Point en Python o punto de entrada, donde básicamente si alguna vez has visto en algún repositorio la instrucción if __name__ == '__main__':
con esta entrada aprenderás en que consiste.
Antes de Continuar te hago la invitación para que accedas al Curso Gratuito de Python en Español desde Cero.
Y que te suscríbas al canal si te interesa la programación, los microcontroladores o la teoría del control.
Entry Point en Python
Supongamos que estamos desarrollando una aplicación en Python extremadamente simple que permite calcular el factorial de un número y muestra en pantalla la operación matemática y el resultado del mismo.
Para calcular el factorial del número hemos decidido crear una función llamada factorial.
def factorial(n): c = n f = 1 print(f'{c} ! = ', end='') while(c > 0): if c>1: print(f'{c} x ', end='') else: print(f'{c} = ', end='') f *= c c -= 1 print(f) return f
Esta función la vamos a almacenar en un archivo o Script llamado modulo.py y para verificar si la función se ejecuta correctamente en el mismo Script vamos a llamar la función y calcular algunos factoriales.
factorial(7) a = factorial(5)
Veremos que la función trabaja adecuadamente.
7 ! = 7 x 6 x 5 x 4 x 3 x 2 x 1 = 5040
5 ! = 5 x 4 x 3 x 2 x 1 = 120
Vemos entonces como quedó nuestro módulo:
Ahora, si pasan los días y queremos crear otra aplicación en Python, en este caso un nuevo script llamado entry_point_ex.py y justo en dicha aplicación deseamos calcular el número factorial. lo más conveniente es reutulizar la función que ya tenemos.
Para eso procedemos a importar el modulo.py en el nuevo script, y para ser más específicos, de la misma forma vista en la entrada de Bibliotecas con Python, vamos a realizar una importación selectiva.
from modulo import factorial
si en este nuevo Script calculamos el factorial del número 4 por ejemplo:
from modulo import factorial f = factorial(4)
Tendremos como resultado inesperado lo siguiente:
7 ! = 7 x 6 x 5 x 4 x 3 x 2 x 1 = 5040
5 ! = 5 x 4 x 3 x 2 x 1 = 120
4 ! = 4 x 3 x 2 x 1 = 24
Vemos que estamos recibiendo además del factorial del número 4, también recibimos el del número 7 y 5 que eran los que habíamos programado dentro del modulo.py que contiene el método de factorial.
Esto ocurre porque cuando Python realiza la importación de los métodos, python va a ejecutar dichos módulos.
Aquí es donde necesitamos usar la variable incorporada __name__
que sirve para hacer referencia al nombre que le hemos colocado a nuestro script.
Por ejemplo, si ejecutas directamente el script modulo.py o directamente el otro script entry_point_ex.py colocando el siguiente print.
print(__name__)
Verás que python NO te mostrará en la consola el nombre del script, sino que te va a mostrar:
__main__
Esto ocurre porque Python interpreta como principal el script que hemos ejecutado.
Pero si dejamos ese print en modulo.py y ejecutamos directamente el otro script entry_point_ex.py el cual esta importando a modulo.py, veremos que ahora si Python nos va a mostrar el nombre que le colocamos al script.
modulo
Entonces lo que debemos hacer, es agregar la condición en nuestro módulo o libreria de que no se ejecute si dicho script no esta siendo llamado directamente, sino que esta siendo invocado por otro script. Para eso usamos el Entry Point en Python.
if __name__ == '__main__':
De esa forma, nuestro script modulo.py va a quedar asi:
def factorial(n): c = n f = 1 print(f'{c} ! = ', end='') while(c > 0): if c>1: print(f'{c} x ', end='') else: print(f'{c} = ', end='') f *= c c -= 1 print(f) return f if __name__ == '__main__': factorial(7) a = factorial(5) print(__name__)
Así cuando ejecutemos nuevamente nuestro script principal entry_point_ex.py solo mostrará el factorial del número 4 que era lo que queríamos.
Estructura del código en Python
Una buena práctica en Python, es siempre crear la función principal que se va a ejecutar en nuestro script, y lo que hacemos es encerrar el llamado de la función principal dentro del Entry Point.
De esa forma nuestro script entry_point_ex.py quedaría mejor estructurado de la siguiente forma:
from modulo import factorial def main(): factorial(4) if __name__ == '__main__': main()
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.