Entorno de script de nivel superior principal

Qué es

__main__ es el nombre del ámbito en el que se ejecuta el código de nivel superior. El nombre de un módulo se establece igual a __main__ cuando se lee desde la entrada estándar, un script o un indicador interactivo.

Un módulo puede descubrir si se está ejecutando en el ámbito principal comprobando su propio __name__, lo que permite una idiomática común para ejecutar código condicionalmente en un módulo. Cuando se ejecuta como un script o con python -m, pero no cuando se importa:

# __name__ == "__main__": comprobar si el script se ejecuta directamente (no se importa)
if __name__ == "__main__":  # Verdadero cuando se ejecuta como script, Falso cuando se importa
    # ejecutar solo si se ejecuta como script
    main()

Para un paquete, se puede lograr el mismo efecto incluyendo un módulo main.py, cuyo contenido se ejecutará cuando el módulo se ejecute con -m.

Por ejemplo, si estamos desarrollando un script diseñado para ser utilizado como módulo, deberíamos hacer:

# Ejemplo: la función se puede importar, pero el código de prueba solo se ejecuta cuando se ejecuta directamente
def add(a, b):
    return a+b

if __name__ == "__main__":  # Solo se ejecuta cuando se ejecuta el archivo, no cuando se importa
    add(3, 5)
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Cuál es el valor de __name__ cuando un archivo Python se ejecuta directamente como un script?
A. El nombre del archivo
B. "**main**"
C. None
D. True

Ventajas

  1. Cada módulo de Python tiene definido su __name__ y si este es __main__, implica que el módulo es ejecutado de forma independiente por el usuario, y podemos realizar las acciones apropiadas correspondientes.
  2. Si importa este script como un módulo en otro script, el nombre se establece en el nombre del script/módulo.
  3. Los archivos de Python pueden actuar como módulos reutilizables o como programas independientes.
  4. if __name__ == "__main__": se utiliza para ejecutar algo de código solo si el archivo se ejecuta directamente y no se está importando.
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Cuál es el propósito principal de usar if __name__ == "__main__":?
A. Ejecutar código solo cuando el archivo se ejecuta directamente, no cuando se importa
B. Evitar que el archivo sea importado
C. Hacer que el archivo se ejecute más rápido
D. Ocultar código a otros módulos

Enlaces relevantes