¿Qué significa `if name ==“ __main __ ”` en Python?

Posible duplicado:
¿Qué hace <if name == “ main ”:>?

He escrito guiones en Python desde hace bastante tiempo y estudio más de Python cuando lo necesito. Cuando leo el código de otras personas, me encuentro if name == "__main__": construyo con bastante frecuencia.

¿Para que sirve?

Esto le permite usar el mismo archivo como biblioteca (importándolo) o como punto de partida para una aplicación.

Por ejemplo, considere el siguiente archivo:

 # hello.py def hello(to=__name__): return "hello, %s" % to if __name__ == "__main__": print hello("world") 

Puedes usar ese código de dos maneras. Por un lado, puedes escribir un progtwig que lo importe. Si importa la biblioteca, __name__ será el nombre de la biblioteca y, por lo tanto, la verificación fallará y el código no se ejecutará (que es el comportamiento deseado):

 #program.py from hello import hello # this won't cause anything to print print hello("world") 

Si no desea escribir este segundo archivo, puede ejecutar su código directamente desde la línea de comandos con algo como:

 $ python hello.py hello, __main__ 

Todo este comportamiento depende de la variable especial __name__ que python establecerá en función de si la biblioteca es importada o ejecutada directamente por el intérprete. Si se ejecuta directamente, se establecerá en __main__ . Si se importa, se establecerá en el nombre de la biblioteca (en este caso, hello ).

A menudo, esta construcción se utiliza para agregar pruebas unitarias a su código. De esta manera, cuando escribe una biblioteca, puede incrustar el código de prueba directamente en el archivo sin tener que preocuparse de que se ejecute cuando la biblioteca se utiliza de la forma habitual. Cuando desea probar la biblioteca, no necesita ningún marco, ya que simplemente puede ejecutar la biblioteca como si fuera un progtwig.

Vea también __main__ en la documentación de python (aunque es muy escasa)

Básicamente,

Hay una distinción entre el archivo de script “principal” y los archivos externos que fueron importados o referenciados de otra manera. Si el script es el script “principal”, entonces la variable especial __name__ será igual a "__main__" .

Puede usar esto para proteger el código de “ejecución” de las clases y variables que tiene el script. Esto le permite importar un script y usar clases y variables sin ejecutar realmente el código principal de ese script si tiene alguno.

Ver también: ¿Qué hace si el nombre == ” main “: do?