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__.py
entra 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á –
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