Should I start a Python program with:
if__name__ == '__main__':
some code...
And if so, why? I saw it many times but don't have a clue about it.
Should I start a Python program with:
if__name__ == '__main__':
some code...
And if so, why? I saw it many times but don't have a clue about it.
If your program is usable as a library but you also have a main program (e.g. to test the library), that construct lets others import the file as a library and not run your main program. If your program is named foo.py and you do "import foo" from another python file, __name__ evaluates to 'foo', but if you run "python foo.py" from the command line, __name__ evaluates to '__main__'.
Note that you do need to insert a space between if and _, and indent the main program:
if __name__ == '__main__':
main program here
A better pattern is this:
def main():
...
if __name__ == '__main__':
main()
This allows your code to be invoked by someone who imported it, while also making programs such as pychecker and pylint work.
Guido Van Rossum suggests:
def main(argv=None):
if argv is None:
argv = sys.argv
...
if __name__ == "__main__":
sys.exit(main())
This way you can run main() from somewhere else (supplying the arguments), and if you want to exit with an error code just return 1 from main(), and it won't make an interactive interpreter exit by mistake.