In python, unlike in C++/C that always has void main() to run the program,
it is usually stated as: if __name__ == “__main__” :
This post is just a note from stack overflow, so basically I just repost the same question in this link: http://stackoverflow.com/questions/419163/what-does-if-name-main-do
When the Python interpreter reads a source file, it executes all of the code found in it. Before executing the code, it will define a few special variables. For example, if the python interpreter is running that module (the source file) as the main program, it sets the special __name__ variable to have a value “__main__”. If this file is being imported from another module, __name__ will be set to the module’s name.
When your script is run by passing it as a command to the Python interpreter,
all of the code that is at indentation level 0 gets executed. Functions and classes that are defined are, well, defined, but none of their code gets ran. Unlike other languages, there’s no
main() function that gets run automatically – the
main() function is implicitly all the code at the top level.
In this case, the top-level code is an
__name__ is a built-in variable which evaluate to the name of the current module. However, if a module is being run directly (as in
myscript.py above), then
__name__ instead is set to the string
"__main__". Thus, you can test whether your script is being run directly or being imported by something else by testing
if __name__ == "__main__": ...
If that code is being imported into another module, the various function and class definitions will be imported, but the
main() code won’t get run.
As a basic example, consider the following two scripts:
# file one.py def func(): print("func() in one.py") print("top-level in one.py") if __name__ == "__main__": print("one.py is being run directly") else: print("one.py is being imported into another module") # file two.py import one print("top-level in two.py") one.func() if __name__ == "__main__": print("two.py is being run directly") else: print("two.py is being imported into another module")
Now, if you invoke the interpreter as
The output will be
top-level in one.py one.py is being run directly
If you run
top-level in one.py one.py is being imported into another module top-level in two.py func() in one.py two.py is being run directly
Thus, when module
one gets loaded, its
"one" instead of
Credits: Adam Rosenfeld