The __name__ variable
Before executing code, Python interpreter reads source file and define few special variables/global variables.
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. Module’s name is available as value to __name__ global variable.
What is a module
A module is a file containing Python definitions and statements. The file name is the module name with the extension .py.
This is how we execute a file as command to the python interpreter,
python script.py
print ("Always executed")
if __name__ == "__main__":
print ("Executed when invoked directly")
else:
print ("Executed when imported")
- All of the code that is at indentation level 0 [Block 1] gets executed. Functions and classes are defined but their code is not executed.
- Here, as we executed script.py directly __name__ variable will be __main__. So, code in this if block[Block 2] will only run if that module is the entry point to your program.
- Thus, you can test whether your script is being run directly or being imported by something else by testing __name__ variable.
- If script is getting imported by some other module at that time __name__ will be module name.
Why and How to use it?
For example we are developing script which is designed to be used as module. Now if we want to use that module by importing we have to comment out our call. Rather than that approach, it is better to use below code:
if __name__ == "__main__":
my_function()
import myscript
myscript.my_function()
Benefits:
- Python files can act as either reusable modules, or as standalone programs.
- if __name__ == “__main__”: is used to execute some code only if the file was run directly, and not imported.
- If you import this script as a module in another script, the __name__ is set to the name of the script/module.

