2012-08-02 16 views
6

A menudo se puede ver esto (variante a):¿Por qué la función main() no está definida dentro de if '__main__'?

def main(): 
    do_something() 
    do_sth_else() 

if __name__ == '__main__': 
    main() 

Y ahora me pregunto por qué no esto (variante b):

if __name__ == '__main__': 
    do_something() 
    do_sth_else() 

O al menos esto (c Variación):

if __name__ == '__main__': 
    def main(): 
     do_something() 
     do_sth_else() 

    main() 

Por supuesto, la función llama dentro de main() pueden no ser llamadas a funciones, solo representan cualquier cosa que desee hacer en su función main().

Entonces, ¿por qué las personas prefieren la variación a sobre las demás? ¿Es solo estilo/sentimiento o hay algunas razones reales? Si es posible, también vincule las fuentes.

Respuesta

11

¿Por qué limitar su función main() al uso de la línea de comandos solamente?

Al definir una función main() en el alcance del módulo, ahora puede ajustar su secuencia de comandos y modificar cómo se llama. Quizás quiera establecer argumentos predeterminados en sys.argv, quizás quiera reutilizar el código en otro script.

4

Esto se debe a que hay dos maneras de utilizar scripts de Python. Uno desde la línea de comandos y otro al importarlo de otro script. Cuando lo ejecuta desde la línea de comandos, desea ejecutar la función main() y cuando lo importa puede que no desee ejecutar la función main() hasta que lo necesite (solo quiere importar main()).

Cuestiones relacionadas