2008-11-13 16 views
14

¿Debo comenzar con un programa de Python:programa en Python inicia

if__name__ == '__main__': 
some code... 

Y si es así, ¿por qué? Lo vi muchas veces, pero no tengo ni idea sobre eso.

+0

@Kirill Titov: No edite la pregunta para decir "Cerrado". No está cerrado. Seleccionó una respuesta, eso es perfecto y todo lo que necesita hacer. Hacer más es confuso. –

Respuesta

23

Si su programa se puede utilizar como una biblioteca pero también tiene un programa principal (por ejemplo, para probar la biblioteca), esa construcción permite que otros importen el archivo como una biblioteca y no ejecuten su programa principal. Si su programa se llama foo.py y "importa foo" desde otro archivo python, __name__ evalúa a 'foo', pero si ejecuta "python foo.py" desde la línea de comandos, __name__ evalúa a '__main__'.

Tenga en cuenta que usted tiene que insertar un espacio entre si y _, y sangrar el programa principal:

if __name__ == '__main__': 
    main program here 
+0

+1: la reutilización es importante. Un módulo puede tener 2 vidas. Como programa principal. Como componente en algún otro programa principal. Como programa principal es HACER cosas. Como componente, simplemente define cosas. –

+0

Esto puede ser evidente, pero asegúrese de que este condicional vaya al final de su archivo. –

3

Esta es una buena práctica. Primero, marca claramente el punto de entrada de tu módulo (suponiendo que no tienes ningún otro código ejecutable en toplevel - yuck). En segundo lugar, hace que su módulo pueda ser importado por otros módulos sin ejecutarlo, lo que algunas herramientas como los verificadores de código, los empaquetadores, etc. deben hacer.

22

Un mejor modelo es la siguiente:

def main(): 
    ... 

if __name__ == '__main__': 
    main() 

Esto permite que su código para ser invocada por alguien que lo importó, mientras que también hace programas como pychecker y pylint trabajo.

+0

¡gracias! Me preocupaba que todo el programa tuviera que sangrarse desde el principio. No me gustó eso. –

18

Guido Van Rossum suggests:

def main(argv=None): 
    if argv is None: 
    argv = sys.argv 
    ... 

if __name__ == "__main__": 
    sys.exit(main()) 

De esta manera se puede ejecutar main() de alguna otra parte (el suministro de los argumentos), y si desea salir con un código de error solo return 1 de main(), y ganó' Hacer que un intérprete interactivo salga por error.

+0

¿Quizás se asegure de que el ejemplo tenga un valor de retorno como se indica en el texto? –

+0

Todas las funciones tienen un valor de retorno implícito de Ninguno, que se traduce en un código de salida de 0. –

Cuestiones relacionadas