Debe haber encontrado la construcción if __name__ == "main" en Python. Pero, ¿sabes su propósito exacto?

En algunos lenguajes de programación, el método principal sirve como único punto de entrada para la ejecución de un programa. Durante la transición de otros lenguajes a Python, el modismo si __nombre__ == "__principal__" podría parecer realizar la misma tarea. En Python, este no es el caso.

El si __nombre__ == "__principal__" idiom permite que se ejecute un código específico cuando el archivo se ejecuta como un script. También se asegura de que no se ejecute el mismo código cuando importa el archivo como un módulo.

Comprender el comportamiento de la variable __name__

El __nombre__ La variable está integrada en Python. Representa el nombre del módulo o script en el que se utiliza. Cuando un script se ejecuta como el programa principal, su valor se establece en __principal__. Si importa el script como un módulo, el valor de la variable se establece en el nombre real del módulo.

Esto puede ser confuso al principio, pero echa un vistazo al siguiente ejemplo:

instagram viewer

Crea un script y nómbralo saludos.py. Este script contendrá una función que saluda a un usuario e imprime el valor de la __nombre__ variable. También le pedirá al usuario que ingrese su nombre.

definitivamentesaludar(nombre):
imprimir(f"Hola, {nombre}!")

imprimir("Valor de __nombre__:", __nombre__)

si __nombre__ == "__principal__":
nombre_usuario = entrada("Por favor, escriba su nombre: ")
saludar (nombre_de_usuario)
demás:
imprimir("Se ha importado el módulo 'saludos'".)

ejecutando el saludos.py script mostrará el siguiente resultado:

el valor de la __nombre__ rendimientos variables como __principal__ porque el script se ejecuta directamente.

Ahora cree otro script y asígnele un nombre script2.py. Luego, importe el saludos guión como un módulo.

importar saludos

imprimir("Ejecutando el script de saludos...")
saludos.saludar("Alicia")

llamando al saludar función de la saludo módulo da la siguiente salida.

el valor de la __nombre__ cambios variables en el nombre real del módulo importado. En este caso, saludos.

Este valor es lo que el idioma si __nombre__ == "__principal__" busca para determinar si un archivo se ejecuta como un script o se importa como un módulo.

¿Cuándo usar la construcción if __name__ == "__main__"?

Puedes agregar el si __nombre__ == "__principal__" construir en cualquier script. Pero hay algunos escenarios en los que usarlo puede ser más beneficioso. Aprenderá sobre estos escenarios utilizando el programa de calculadora simple a continuación.

# calculadora.py

definitivamenteagregar(a, b):
devolver a + b

definitivamentesustraer(a, b):
devolver un-b

definitivamentemultiplicar(a, b):
devolver un * segundo

definitivamentedividir(a, b):
si b != 0:
devolver un / b
demás:
devolver"Error: ¡División por cero!"

si __nombre__ == "__principal__":
imprimir("¡Bienvenido a la Calculadora!")
imprimir("Seleccione una operación:")
imprimir("1. Agregar")
imprimir("2. Sustraer")
imprimir("3. Multiplicar")
imprimir("4. Dividir")

elección = int (entrada ("Ingrese su elección (1-4): "))

num1 = flotante (entrada ("Ingrese el primer número: "))
num2 = flotante (entrada ("Ingrese el segundo número: "))

si elección == 1:
resultado = suma (num1,num2)
imprimir(f"La suma de {num1} y {núm2} es: {resultado}")
elif elección == 2:
resultado = restar (num1, num2)
imprimir(f"La diferencia entre {num1} y {núm2} es: {resultado}")
elif elección == 3:
resultado = multiplicar (num1, num2)
imprimir(f"El producto de {num1} y {núm2} es: {resultado}")
elif elección == 4:
resultado = dividir (num1, num2)
imprimir(f"La división de {num1} por {núm2} es: {resultado}")
demás:
imprimir("¡Elección no válida!")

El primer escenario es cuando desea ejecutar un script de forma independiente y realizar acciones específicas. Esto permite que el script funcione como un programa independiente. El si __nombre__ == "__principal__" construct permite a los usuarios interactuar con la calculadora mediante la interfaz de línea de comandos. Esto brinda a los usuarios la capacidad de usar la funcionalidad del programa sin tener que comprender o modificar el código subyacente.

Todavía es posible ejecutar el programa sin el si __nombre__ == "__principal__" construir y lograr el mismo resultado, pero su código perdería la organización del código modular.

El segundo escenario es cuando desea que su código para tener un diseño modular. Esto permite que otros programas importen su script como un módulo y usen sus funciones sin activar funcionalidades innecesarias.

En el caso del programa calculadora, otros programas pueden importar el calculadora módulo sin activar la interfaz CLI y las indicaciones de entrada del usuario. Esto asegura la reutilización del código y el diseño modular. Por lo tanto, permite que la calculadora se integre perfectamente en aplicaciones más grandes.

importar calculadora

# Usando las funciones del módulo calculadora
result_add = calculadora.add(5, 3)
imprimir("Resultado de la suma:", resultado_añadir)

resultado_restar = calculadora.restar(10, 4)
imprimir("Resultado de la resta:", restar_resultado)

El tercer escenario es cuando desea pruebe y depure su secuencia de comandos de Python independientemente de cualquier otro módulo o script que pueda importarlo. En el ejemplo de la calculadora, es más fácil concentrarse en probar la funcionalidad de la calculadora sin la interferencia del código externo.

importar calculadora

# Probando las funciones de la calculadora
si __nombre__ == "__principal__":
# Adición de prueba
resultado = calculadora.add(5, 3)
imprimir("Resultado de la suma:", resultado)

# Resta de prueba
resultado = calculadora.restar(8, 4)
imprimir("Resultado de la resta:", resultado)

# Prueba de multiplicación
resultado = calculadora.multiplicar(2, 6)
imprimir("Resultado de la multiplicación:", resultado)

El código anterior demuestra cómo depurar el script de la calculadora de forma independiente.

¿Cuándo es innecesario usar la construcción if __name__ == "__main__"?

Como ha visto en los escenarios anteriores, el uso de la si __nombre__ == "__principal__" construct es diferenciar el script que está ejecutando como programa principal y el que está importando como módulo. Sin embargo, hay algunos casos en los que su uso es innecesario.

El primer caso es cuando su secuencia de comandos es simple y no tiene funciones o módulos reutilizables y no tiene la intención de importarla. En este caso, debe omitir esta construcción ya que todo el script se ejecuta cuando se ejecuta. Esto es común para las secuencias de comandos de una sola vez que realizan un propósito específico y no están diseñadas para su reutilización o importación.

El otro caso es cuando está trabajando en una sesión interactiva de Python, p. al usar el cuaderno Jupyter Notebook. En una sesión interactiva, escribe y ejecuta el código directamente en el símbolo del sistema o en un shell interactivo de Python. Como Python REPL (Read-Eval-Print Loop). Esto le permite experimentar con el código y probar pequeños fragmentos, lo que le brinda resultados inmediatos.

En estos entornos interactivos, no se aplica el concepto de un script que se ejecuta como programa principal o se importa como módulo. Está ejecutando directamente fragmentos de código sin necesidad de un punto de entrada de script tradicional.

¿Cómo te conviertes en un maestro en Python?

Para convertirse en un maestro en cualquier lenguaje de programación, debe comprender cómo funcionan los conceptos subyacentes de las funciones o herramientas. Tal como aprendió sobre la construcción if __name__ == "__main__" en este artículo.

Comprender los conceptos subyacentes lo ayudará a saber exactamente cómo se comportará su programa cuando los use. No hay prisa, aprender los conceptos uno a la vez te ayudará a profundizar en cada uno de ellos.