What Does “If __name__ == ‘__main__’” Do in Python?

__name__ is a special variable in Python. “If __name__== ‘__main__’” is a conditional statement that tells the Python interpreter under what conditions the main method should be executed.

Person Holding a name tag
Image: Shutterstock / Built In
Brand Studio Logo
UPDATED BY
Brennan Whitfield | Oct 24, 2024

If you are new to Python, you might have noticed that it’s possible to run a Python script with or without a main method. And the notation used in Python to define one, i.e. if __name__ == ‘__main__’, is not self-explanatory especially for newcomers.

Python __name__ Explained

In Python, __name__ is a special variable assigned to the name of the Python module by the interpreter. If your module is invoked as a script, then the string ‘__main__’ will automatically be assigned to the special variable __name__. But if you import your module into another module, the string ‘my_module’ will be assigned to __name__

In today’s tutorial, we’ll explore and discuss the purpose of a main method and what to expect when you define one in your Python applications.

 

A tutorial on Python’s code: if __name__ == '__main__'. | Video: Cory Schafer

What Is the Purpose of __name__ in Python?

Before executing a program, the Python interpreter assigns the name of the Python module into a special variable called __name__. Depending on whether you are executing the program through the command line or importing the module into another module, the assignment for __name__ will vary.

If you invoke your module as a script, for instance:

python my_module.py

Then, Python interpreter will automatically assign the string '__main__' to the special variable __name__. On the other hand, if your module is imported into another module:

# Assume that this is another_module.py
import my_module

Then the string 'my_module' will be assigned to __name__.

More on Python__init__ vs. __new__ Methods in Python

 

How Does the Main Method Work?

Now, let’s assume that we have the following module, that contains the following lines of code:

# first_module.py
print('Hello from first_module.py')

if __name__ == '__main__':
    print('Hello from main method of first_module.py')

In the module above, we have one print statement that’s outside of the main method and another print statement that’s inside. The code under the main method will only be executed if the module is invoked as a script from, for example the command line, as shown below:

python first_module.py
Hello from first_module.py
Hello from main method of first_module.py

Now, let’s say that instead of invoking module first_module as a script, we want to import it in another module:

# second_module.py
import first_module

print('Hello from second_module.py')

if __name__ == '__main__':
    print('Hello from main method of second_module.py')

And finally, we invoke second_module as a script:

python second_module.py
Hello from first_module.py
Hello from second_module.py
Hello from main method of second_module.py

Notice that the first output comes from module first_module, and specifically from the print statement, which is outside the main method. Since we haven’t invoked first_module as a script, but instead, we’ve imported it into second_module the main method in first_module will simply be ignored because if __name__ == ‘__main__' evaluates to False. Recall that __name__ variable for second_module has been assigned string '__main__' while the first_module __name__ variable has been assigned the name of the module, i.e. ‘first_module’.

Although everything under if __name__ == ‘__main__' is considered to be what we call a main method, it’s good practice to define one proper main method instead, which is called if the condition evaluates to True. For instance:

# my_module.py
def main():
    """The main function of my Python Application"""
    print('Hello World')

if __name__ == '__main__': 
    main()

I would generally discourage you from having multiple main functions in a single Python application. I have used two different main methods just for the sake of the example.

More on PythonHow to Copy a File With Python

 

Understanding If__Name__== ‘__main__’ in Python 

In this article, I have described how the main method gets executed in Python and under what conditions. When a module is invoked as a string, then Python interpreter will assign the string '__main__' to a special variable called __name__, and the code, which is defined under the condition if __name__ == ‘__main__', will subsequently get executed. 

On the other hand, when a module is imported in another module, then the Python interpreter will assign the string with the name of that module to the special variable __name__. This means that in such cases if __name__ == ‘__main__’ will evaluate to False which means that only the code outside of this condition will get executed once imported.

Frequently Asked Questions

The “if __ name __ == '__ main __'” statement in Python checks if the current script is being run directly as the main program, or if it’s being imported as a module into another program. __name__ is a variable that exists in every Python module, and is set to the name of the module. __main__ is the name of the Python environment where top-level code is run (with top-level code being the first user-specified module to start running). When a module is being run in a top-level code environment, the __name__ variable is set to the string “__main__”.

Using the main() function or the “if __ name __ == '__ main __'” statement in Python isn’t always necessary, since the Python interpreter runs from the top of the file by default until a specific function is defined. If a Python module needs to be run directly on the command line, using “if __ name __ == '__ main __'” can be helpful.

The main() function in Python acts as the starting point of code execution for a program, and allows a program to be used as both a standalone script or a module. A program using main() or the “if __ name __ == '__ main __'” statement can prevent the program's code from being executed when it’s being imported as a module, and executes the program only when it’s run directly. Using main methods also lets a program’s functions be callable when imported into another Python program.

Yes, Python can run without using the main() function. However, using a main() function in a program can be useful for importability.

Explore Job Matches.