¿Qué hay en un __name__ de (Python)?

Una introducción a la variable _ _name_ _ y su uso en Python

Lo más probable es que haya visto la __name__variable cuando haya revisado el código Python. A continuación, verá un fragmento de código de ejemplo de cómo puede verse:

if __name__ == '__main__': main()

En este artículo, quiero mostrarte cómo puedes hacer uso de esta variable para crear módulos en Python.

¿Por qué se utiliza la variable _ _name_ _?

La __name__variable (dos guiones bajos antes y después) es una variable especial de Python. Obtiene su valor dependiendo de cómo ejecutemos el script que lo contiene.

A veces, escribe un script con funciones que también pueden ser útiles en otros scripts. En Python, puede importar ese script como un módulo en otro script.

Gracias a esta variable especial, puede decidir si desea ejecutar el script. O que desea importar las funciones definidas en el script.

¿Qué valores puede contener la variable __name__?

Cuando ejecuta su secuencia de comandos, la __name__variable es igual a __main__. Cuando importe el script que lo contiene, contendrá el nombre del script.

Echemos un vistazo a estos dos casos de uso y describamos el proceso con dos ilustraciones.

Escenario 1: ejecutar el script

Supongamos que escribimos el guiónnameScript.py como sigue:

def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()

Si ejecuta nameScript.py, se sigue el proceso siguiente.

Antes de que se ejecute el resto del código, la __name__variable se establece en __main__. Después de eso, elmainy myFunctionse ejecutan declaraciones def. Dado que la condición se evalúa como verdadera, se llama a la función principal. Esto, a su vez, llama myFunction. Esto imprime el valor de __main__.

Escenario 2: importar el script en otro script

Si queremos reutilizar myFunction en otro script, por ejemplo importingScript.py, podemos importar nameScript.pycomo módulo.

El código importingScript.pypodría ser el siguiente:

import nameScript as ns
ns.myFunction()

Luego tenemos dos alcances: uno de importingScripty el segundo alcance de nameScript. En la ilustración, verá en qué se diferencia del primer caso de uso.

En importingScript.py, la __name__variable se establece en __main__. Al importar nameScript, Python comienza a buscar un archivo agregando .pyal nombre del módulo. Luego ejecuta el código contenido en el archivo importado.

Pero esta vezestá configurado en nameScript. De nuevo se ejecutan las declaraciones def para main y myFunction. Pero ahora la condición se evalúa como falsa y no se llama a main.

En importingScript.py llamamos myFunction que genera nameScript. NameScript es conocido por myFunction cuando se definió esa función.

Si imprimiera __name__en el script importing, esto saldría __main__. La razón de esto es que Python usa el valor conocido en el alcance de importingScript.

Conclusión

En este breve artículo, expliqué cómo puede usar la __name__variable para escribir módulos. También puede ejecutar estos módulos por su cuenta. Esto se puede hacer haciendo uso de cómo cambian los valores de estas variables dependiendo de dónde ocurren.