Uso de __main__.py en Python

Muchos de nosotros hemos trabajado en la creación de su propio módulo personalizado en Python y estamos muy familiarizados con el candidato ‘ __init__.py‘. Si no lo sabe, obtengamos una descripción breve y corta de ‘__init__.py’ antes de profundizar en el tema en cuestión. En realidad, cuando intentamos importar un módulo a Python de forma predeterminada, Python accede a __init__.py para buscar las importaciones necesarias.

Ahora hay dos escenarios.

  • Archivos de Python que están bien organizados para ser importados como módulos
  • Archivos de Python (estructura de archivo único) que se pueden ejecutar directamente desde la línea de comandos

En el primer escenario, cuando intentamos importarlo como un módulo, __init__.pyentra en juego. Para el segundo escenario usamos alguna sintaxis hackish como

def main ():
    pass
  
if __name__ == '__main__':
    main()

Esta sintaxis se puede relacionar con el inicio de main en otros lenguajes como JAVA y C++. Pero esta sintaxis no funcionará idealmente con el tercer escenario. Entonces, ¿qué hacer si queremos ejecutar dichos archivos directamente desde la línea de comandos?
Aquí es donde __main__.py viene al rescate.

Tomemos un ejemplo, encontraremos el área de un rectángulo, un cuadrado y un círculo. En aras de la comprensión, dividamos las tres operaciones en tres archivos .py separados y almacenémoslos en un módulo llamado src.

El árbol de archivos se verá así

+---src
|   |   circle.py
|   |   rectangle.py
|   |   square.py
|   |   __init__.py
|   |   

Ahora src se puede importar como un módulo desde cualquier otro programa de Python si se agrega a la ruta. Pero, ¿y si queremos ejecutarlo desde la línea de comandos? Para esto, almacenamos la carpeta src en una carpeta llamada digamos area_finder y agregamos un archivo llamado __main__.py debajo de ella. El árbol se vería como

area_finder
|   readme.md
|   __main__.py
|   
+---src
|   |   circle.py
|   |   rectangle.py
|   |   square.py
|   |   __init__.py
|   |   

contenido de __main__.py

print("____-menu_____")
print("1: to find area of square \n\
2: to find area of rectangle\n\
3: to find area of circle")
  
ch = int(input())
  
if ch == 1:
    from src.square import square
    print("enter side")
    s = int(input())
    print ("the area is ", square(s))
  
if ch == 2:
    from src.rectangle import rectangle
    print("enter length and breadth")
    l = int(input())
    b = int(input())
    print("the area is ", rectangle(l, b))
  
if ch == 3:
    from src.circle import circle 
    print("enter radius")
    r = int(input())
    print("the area is ", circle(r))

Ahora, cuando los ejecutamos desde la terminal/símbolo del sistema como este

python area_finder

La salida será –

python-main.py_

Entonces, ¿qué sucede cuando ejecutamos el comando? Python busca un archivo llamado __main__.py para iniciar su ejecución automáticamente. Si no lo encuentra, arrojará un error; de lo contrario, ejecutará main.py y, a partir del código, puede comprender que importará los módulos de src para encontrar el área.

Así que ahora hemos aprendido cómo funciona __main__.py. Ahora, echemos un vistazo a sus mayores ventajas:

  • Elimina la ambigüedad entre el usuario final sobre el punto de entrada del programa, ya que Python lo hace automáticamente.
  • Ayuda en la ejecución limpia del código.

Publicación traducida automáticamente

Artículo escrito por imankalyan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *