Todos los demás ya lo han respondido, pero creo que todavía tengo algo más que agregar.
razones para tener que if
declaración llamando main()
(en ningún orden en particular):
Otros lenguajes (como C y Java) tienen una función main()
que se llama cuando se ejecuta el programa. Utilizando este if
, podemos hacer que Python se comporte como ellos, lo cual es más familiar para muchas personas.
El código será limpiador, más fácil de leer y mejor organizado. (Sí, sé que esto es subjetivo)
Será posible import
que el código python como un módulo sin efectos secundarios desagradables.
variables dentro def main
son locales, mientras que los que están afuera son mundial. Esto puede introducir algunos errores y comportamientos inesperados.
Pero, ustedes están no requiere escribir una función main()
y llamarlo dentro de una sentencia if
.
Normalmente, yo mismo empiezo a escribir pequeños scripts desechables sin ningún tipo de función. Si el guión crece lo suficiente, o si siento que poner todo ese código dentro de una función me beneficiará, entonces refactorizaré el código y lo haré. Esto también ocurre cuando escribo scripts bash
.
Incluso si coloca el código dentro de la función principal, no es necesario que lo escriba exactamente como eso. Una variación podría ser ordenada:
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
Esto significa que puede llamar main()
de otros scripts (o shell interactivo) que pasan los parámetros personalizados. Esto podría ser útil en pruebas unitarias o cuando se procesa por lotes. Pero recuerde que el código anterior requerirá un análisis sintáctico de argv, por lo tanto, tal vez sería mejor utilizar una llamada diferente que pase los parámetros ya analizados.
En una aplicación orientada a objetos que he escrito, el código era la siguiente:
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
Por lo tanto, no dude en escribir el código que mejor le convenga. :)
Ver http://stackoverflow.com/questions/419163/what-does-if-name-main-do – gimel
stackoverflow.com/questions/419163/what-does-if-name-main-do does no responde toda la pregunta – Johnsyweb
Lo que el supuesto duplicado no responde: tener una función main() (en lugar de simplemente escribir todo el código en el bloque "if __name__") es útil porque evita crear accidentalmente variables globales que podrían afectar a otras funciones. – slowdog