What’s Up (With) Main?
originally published 4/15/2017
As you might expect of an aspiring data scientist, I’ve been learning Python. One of the conventions I have found rather strange is the presence of the main
function in Python modules. Other languages such as C and C++ require a main
function (well, in most situations, anyway). Python doesn’t require a main
function, so I was a bit perplexed as to why I kept running across it.
A common construct in Python is the following
# my_file.py
def main():
print("Hey there!")
if __name__ == "__main__": main()
If you were to run my_file.py from the command line like so
python my_file.py
then the interpreter would set name
to “main”. The interpreter does this whenever you run a module (i.e. a file) directly. If module_a is imported into module_b, however, the name
variable for module_a is set to its file name.
All of your modules should have their statements wrapped up in a main function. If statements in a module are free-floating then even when that module is imported, those statements will be executed.
# free_floating.py
def call_me():
print("I've been called")
call_me()
# conventional.py
import free_floating
def main()
print("I am conventional python.")
if __name__ == "__main__": main()
When you run python conventional.py
, the statement “I’ve been called” is printed. In short, using the main
function in your modules allows you to have modules that can be both executed directly or imported into other modules. Note that it isn’t required that your main function be called “main”. This is also perfectly acceptable:
# unconventional.py
def jibber_jabber()
print("I am unconventional python.")
if __name__ == "__main__": jibber_jabber()
Photo by Marius Masalar on Unsplash