Utilidad de la variable __name__

Una vez que entendemos el contenido de esta variable podríamos preguntarnos qué utilidad tiene su uso. Pues bien, la principal utilidad es para restringir la ejecución de cierta parte del código solo cuando el fichero esté siendo ejecutado como programa principal (o solo cuando esté siendo ejecutado al ser importado como librería). Siguiendo con el ejemplo anterior, supongamos que queremos que la función print de nuestro fichero2 solo se ejecute cuando estemos ejecutando dicho código como programa principal. Bastaría con modificar dicho fichero del siguiente modo:

if __name__ == "__main__":
    print("fichero2:", __name__)

Ahora, si ejecutamos este fichero (como programa principal) el resultado será el siguiente:

fichero2: __main__

...pues se cumple la condición.

La variable __name__

Sin embargo, si ejecutamos nuestro fichero1 (desde el que se importa fichero2), el resultado ahora no es el mismo que habíamos obtenido anteriormente:

print("fichero1:", __name__)

fichero1: __main__

La variable __name__

Analicemos en este caso el orden de ejecución del código:

  1. En primer lugar se importa la librería fichero2. Esto provoca la ejecución del código if (if __name__ == "__main__":) que no se cumple pues, al ser importado como librería, la variable __name__ para dicho fichero no recibe el nombre "__main__", sino el nombre del fichero ("fichero2"). Como consecuencia, no se ejecuta la función print.
  2. Se ejecuta el print del fichero principal.

Como vemos, esto nos permite añadir en nuestros ficheros código de pruebas que no deba ejecutarse cuando el fichero sea importado, la creación de clases o definición de funciones que no deban ser parte de la interfaz de la librería, etc.