What does if __name__ == ‘__main__‘in python means?

In python, you must have come accross the following code :-

if __name__ == '__main__': main()

In this tutorial, we will learn in detail what does the above statement means. As per official documentation:

‘__main__‘ is the name of the scope in which top-level code executes. A module’s __name__ is set equal to ‘__main__‘ when read from standard input, a script, or from an interactive prompt.

It means that if any module/python file is running as the main program, it sets the special__name__ variable to have a value ‘__main__‘

Create a python file ‘module_one.py’ and type the following code:-

# module_one.py print f'The name of module one is {__name__}'

If you will run it. You will get the following output:-

The name of module one is __main__

However, if this module is imported in some other file or module, variable __name-- will be set as the name of the first module.

To make it clear, create another python file (module) called ‘module_two.py’ and import first module in it:-

# module_two.py import module_one

Since, we have imported module_one in module_two.py, when we will run the second module, it will execute the first module and we will get the following output on running module_two.py:-

The name of module one is module_one

Since, now we are directly running module_two.py, Python will set it’s __name__ as ‘__main__‘

# module_two.py import module_one print f'The name of module two is {__name__}'

Output of this module will be:-

The name of module one is module_one The name of module two is __main__

Hence if __name__ == ‘__main__‘ checks whether the file is being run directly or it has been imported into some other file. The following example will make it more clear:-

# module_one.py print "This will always be printed" if __name__ == "__main__": print "Module one has been run directly" else: print "Module one has been imported"

# Output This will always be printed Module one has been run directly

Now if we just import module_one in module_two.py and run it, we will get the following output.

# module_two.py import module_one

# Output This will always be printed Module one has been imported

We use this if we want to make a certain function run, when a module is run directly and some other function to run if it is imported.

If you have any query, please feel free to ask in comment section.